匿名内部类
匿名内部类也就是局部内部类的简写。抽象类匿名内部类
抽象类abstract class Person {
public abstract void show();
}
PersonDemo类
class PersonDemo {
// 这里的method方法的参数是一个Person对象,这个参数是引用类型,
// 因为这个Person对象是一个抽象类,因此我们还要去重写其中的抽象方法
public void method(Person p) {
p.show();
}
}
测试类
class PersonTest {
public static void main(String[] args) {
PersonDemo p = new PersonDemo();
//这里method的参数是抽象对象,因此还要对其中的抽象方法进行重写,
//这里new的其实是抽象类的匿名子类对象
p.method(new Person() {
@Override
public void show() {
System.out.println("我是被内部类重写的抽象方法");
}
});
}
}
结果
我是被内部类重写的抽象方法
注:你可能会疑惑抽象类不是不能实例化吗?那为什么这里会new有呢?这里其实new的是抽象类的子类,这就好比,你不想让别人知道你的名字的时候,你可以用别人的名字代替你的名字(接口同理)。
接口匿名内部类
接口public interface Inner {
public static final int a=100;
public abstract void show();
}
测试类
public class InnerText {
public static void main(String[] args) {
//重写接口方法通过匿名对象(也就是它的子类对象)对其方法进行重写调用
new Inner(){
@Override
public void show(){
System.out.println("我是重写的接口方法");
//这里也可以写成this.a,这个this表示匿名内部类这个对象(接口子类对象)
System.out.println(a);
}
}.show();
}
}
结果
我是重写的接口方法
100