匿名内部类的使用
为什么需要匿名内部类?
匿名内部类的作用:比如想要创建几个类,但是都只用一次。我们可以不再采用传统的步骤(新建一个类实现接口再重写方法),而是采用匿名内部类,来简化开发。
一、基于接口的匿名内部类
interface AI{ //一个接口ai
void cry( );
}
class Tiger implements AI{ //使用传统方法新建一个类实现接口
@override
pubilc void cry(){
system.out.println("老虎叫");
}
}
class outer { //一个外部类
public void method(){ //一个方法
Tiger tiger = new Tiger(); //使用传统方法创建一个tiger并调用方法
tiger.cry();
AI taiger = new AI(){ //采用匿名内部类实现
@override
public void cry(){
system.out.println("老虎叫");
}
}
}
}
那么匿名内部类的底层是什么东西呢
AI taiger = new AI(){ //采用匿名内部类实现
@override
public void cry(){
system.out.println("老虎叫");
}
}
///底层逻辑
class outer$1 implements AI(){ //匿名内部类的名字就是外部类的名字加一个$
@override
public void cry(){
system.out.println("老虎叫");
}
}
二、基于类的匿名内部类
class Father {
public Father (String name){ //构造器
}
public void test(){ //方法
}
}
class outer { //一个外部类
public void method(){ //一个方法
Tiger tiger = new Tiger(); //使用传统方法创建一个tiger并调用方法
Father father = new Father("jack"){ //匿名内部类就是加个(大括号;)
};
}
他的底层逻辑就是
class outer$2 extends Father(){
}
new这个东西会返回一个对象,Father("jack"){ };创建了一个匿名内部类outer$2,然后被new返回给father。所以,father的编译类型是Father,运行类型是outer$2。