①匿名内部类只针对重写一个方法的时候使用;
②若有多个方法,通过匿名内部类进行调用的时候,需要一个一个进行调用,比较麻烦,所以不建议使用。
③匿名内部类是无法向下转型的,向下转型需要子类的类名,这里面没有子类的类名,完全是通过父类去做的
package Demo_nimingneibulei;public class Demo2_NoName {public static void main(String[] args) {Outer2 wsq = new Outer2();wsq.method();}}interface Inter2{ //父类public void show1();public void show2();
}//匿名内部类只针对重写一个方法的时候使用
class Outer2 {public void method(){ //匿名内部类要写到方法里/* //若有多个方法,用匿名内部类去调用,需要调用多次,比较麻烦new Inter2(){public void show1(){System.out.println("show1");}public void show2(){System.out.println("show2");}}.show1();new Inter2(){public void show1(){System.out.println("show1");}public void show2(){System.out.println("show2");}}.show2();若有多个方法,通过匿名内部类进行调用的时候,需要一个一个进行调用*/Inter2 i = new Inter2(){ //从 new开始到; 全部都是子类对象; 父类引用指向子类对象,new Inner2(){...}; 整块代表子类对象public void show1(){ //子类对象中的show1方法System.out.println("show1");}public void show2(){ //子类对象中的show2方法System.out.println("show2");}public void show3(){ //在子类对象里面,又重新定义一个自己特有的方法show3()System.out.println("show3");}};i.show1(); //编译看的是接口中的show1方法,接口中有show1方法,编译成功,程序继续进行,运行看的是子类对象里面的show1方法i.show2(); //编译看的是接口中的show2方法,接口中有show2方法,编译成功,程序继续进行,运行看的是子类对象里面的show1方法// i.show3(); //编译错误,编译看的是父类,是接口里面,而接口里面并没有show3方法,所以编译错误,程序报错 //匿名内部类是无法向下转型的,向下转型需要子类的类名,这里面没有子类的类名,完全是通过父类去做的}
}