匿名内部类
作用:简化开发
>匿名内部类的基本语法:
new 类名或接口(参数列表){类体};
>在方法内,只想使用一次类后不再使用,就创建匿名内部类
例如:
class AnnoymousInnerClass{
private int n = 10;
public void show(){
IA mao = new IA(){//编译类型为IA,运行类型为匿名内部类(AnnoymousInnerClass$1)
@Override
public void say() {
System.out.println("小喵喵喵叫");
}
};
mao.say();
System.out.println(mao);
Person han = new Person("韩"){};//编译类型为Person,运行类型为匿名内部类(AnnoymousInnerClass$2)
System.out.println(han);
}
}
interface IA{
void say();
}
class Person{
private String name;
public Person(String name) {
this.name = name;
}
}
>**IA dog = new IA() 在jdk底层会先创建一个匿名内部类 class XXX implements IA{类体},立马实例化后,将地址传给dog。并且该匿名内部类实例化完成后就销毁了,不能进行第二次实例化,但可以继续使用实例化的对象。**也就是说对象还存在,类不存在了。
>通过getclass方法得到该匿名内部类名为: 外部类名$1,多个匿名内部类数字+1
>**Person han = new Person(“韩”){};在jdk底层会先创建一个匿名内部类 class XXX extends Person{类体},立马实例化后,将地址传给han。**若不加{}为IPerson han = new Person(“韩”);则会创建一个Person类对象。在这相当于创建了一个Person的子类对象,将地址赋给父类(向上转型的用法相同)。
抽象类也类似实现,只是必须重写抽象的所有方法。