匿名内部类:没有类名的类。
匿名内部类的好处:简化书写。
匿名内部类的使用前提:必须存在继承或者实现关系才能使用。
1.继承关系下的匿名内部类
/**
* Author:Liu Zhiyong
* Version:Version_1
* Date:2016年6月14日07:49:51
* Desc:匿名内部类:没有类名的类。
匿名内部类的好处:简化书写。
匿名内部类的使用前提:必须存在继承或者实现关系才能使用。
*/
abstract class Animal
{
public abstract void run();
// public abstract Animal run();
public abstract void sleep();
}
class Outer
{
public void print(){
//需求:在方法内部定义一个类继承Animal类,然后调用run方法与sleep方法
/*
//1局部内部类的做法
class Dog extends Animal
{
public void run(){
System.out.println("狗在跑。。。。");
}
public void sleep(){
System.out.println("狗在睡觉。。。。");
}
}
//创建对象
Dog dog = new Dog();
dog.run();
dog.sleep();
*/
//2匿名内部类的做法:匿名内部类只是没有类名,其它的一概成员都是具备的
//匿名内部类与Animal是继承的关系。 目前是创建Animal子类的对象
Animal a = new Animal(){ //多态
//匿名内部类的成员
public void run(){
System.out.println("狗在跑。。。。");
}
public void sleep(){
System.out.println("狗在睡觉。。。。");
}
//特有的方法
public void bite(){
System.out.println("狗在咬。。。。");
}
};
a.run();
a.sleep();
}
}
class Demo61
{
public static void main(String[] args)
{
Outer outer = new Outer();
outer.print();
}
}
2.实现关系下的匿名内部类
匿名内部类一般用于实参。
/**
* Author:Liu Zhiyong
* Version:Version_1
* Date:2016年6月14日11:20:35
* Desc:实现关系下的匿名内部类
匿名内部类一般用于实参。
*/
interface Dao
{
public void add();
public void delete();
}
class Outer
{
public void print(){
//创建一个匿名内部类的对象
Dao dao = new Dao(){ //接口不能创建对象。这里是创建了接口实现类的对象。
public void add(){
System.out.println("添加成功。。。。");
}
public void delete(){
System.out.println("删除成功。。。。");
}
//特有的方法,若是存在特有的 方法,只能采用局部内部类的方法来调用,匿名内部类不行
public void update(){
System.out.println("修改成功。。。。");
}
};
dao.add();
dao.delete();
}
}
class Demo62
{
public static void main(String[] args)
{
test(new Dao(){ //匿名内部类一般用于实参
public void add(){
System.out.println("添加成功。。。。");
}
public void delete(){
System.out.println("删除成功。。。。");
}
});
}
//调用这个方法
public static void test(Dao dao){
dao.add();
}
}