基于接口的匿名内部类
class Outer04 { //外部类
private int n1 = 10;//属性
public void method() {//方法
//基于接口的匿名内部类
//1.需求: 想使用IA接口,并创建对象
//2.传统方式,是写一个类,实现该接口,并创建对象
//3. 可以使用匿名内部类来简化开发
//4. tiger的编译类型 ? IA
//5. tiger的运行类型 ? 就是匿名内部类 Outer04$1
/*
我们看底层 会分配 类名 Outer04$1
class Outer04$1 implements IA {
@Override
public void cry() {
System.out.println("老虎叫唤...");
}
}
*/
//6. jdk底层在创建匿名内部类 Outer04$1,匿名内部类其实也有名字即 外部类+$+1 ,
//然后立即马上就创建了 Outer04$1实例,并且把地址返回给 tiger
class Outer04 {
private int n1 = 10;
public void method() {
IA ia = new IA() {
@Override
public void cry() {
System.out.println("老虎叫唤...");
}
};
ia.cry();
System.out.println(ia.getClass());//输出了ia的运行类型
}
interface IA {
public abstract void cry();
}
基于类的匿名内部类
class Outer04 {
private int n1 = 10;
public void method() {
Father father = new Father("jack") {//这里匿名内部类(Outer04$1)继承了Father类
int n2 = 10;
@Override
public void test() {
System.out.println("匿名内部类重写了test()方法..");
}
};
System.out.println(father.getClass());
father.test();
Animal animal = new Animal() {
//由于继承的关系,继承抽象类就必须实现抽象类所有的方法
@Override
void eat() {
System.out.println("小狗吃骨头...");
}
};
animal.eat();
}
}
class Father {
public Father(String name) {
System.out.println("接收到的name: " + name);
}
public void test() {
}
}
abstract class Animal {//抽象类
abstract void eat();
}
附:该篇文章仅用于记录所学知识,如有误导敬请海涵!