匿名内部类重写多个方法调用
案例一:
class Demo05_NoNameInnerClass {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
}
}
interface Inter {
public void show1();
public void show2();
}
//匿名内部类只针对重写一个方法的时候使用,如果多个方法的时候就用有名字的类了。
class Outer {
public void method() {
/*new Inter(){
public void show1() {
System.out.println("show1");
}
public void show2() {
System.out.println("show2");
}
}.show1();
new Inter(){
public void show1() {
System.out.println("show1");
}
public void show2() {
System.out.println("show2");
}
}.show2();*/
Inter i = new Inter(){
public void show1() {
System.out.println("show1");
}
public void show2() {
System.out.println("show2");
}
/*public void show3() {
System.out.println("show3");
}*/
};
i.show1();
i.show2();
//i.show3(); //匿名内部类是不能向下转型的,因为没有子类类名
}
}
案例二:
class Demo05_NoNameInnerClass {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
}
}
interface Inter {
public void show1();
public void show2();
}
//匿名内部类只针对重写一个方法的时候使用,如果多个方法的时候就用有名字的类了。
class Outer {
public void method() {
//父类引用指向子类对象
Inter i = new Inter(){
public void show1() {
System.out.println("show1");
}
public void show2() {
System.out.println("show2");
}
/*public void show3() {
System.out.println("show3");
}*/
};
//编译的时候看的是接口中的方法,运行的时候看的是子类对象中的方法
i.show1();
i.show2();
//这样写是有弊端的,匿名内部类是不能向下转型的,因为没有子类类名
//编译报错找不到符号,接口中没有定义show3方法
//i.show3();
}
}