匿名内部类首先要明白匿名,匿的是谁的名-----子类对象或实现类对象。也就是说匿名内部类就是父类的子类对象或者是接口的实现类对象
我先介绍格式再用一个例子你就明白了
两种格式:
格式一:
new 类A(){
方法体
}
此时产生的是类A的子类对象;
格式二:
new 接口A(){
方法体
}
此时产生的是接口A的实现类对象;
一个简单的例子就让你明白
首先是我们通常写的java代码:
abstract class Person {
public abstract void eat();
}class Child extends Person {
public void eat() {
System.out.println("eat apple");
}
}public class Demo {
public static void main(String[] args) {
Person p = new Child();
p.eat();
}
}
再写成匿名内部类的形式:
abstract class Person {
public abstract void eat();
}public class Demo {
public static void main(String[] args) {
Person p = new Person() {
public void eat() {
System.out.println("eat apple");
}
};
p.eat();
}
}
我们用Child继承了Person类,然后实现了Child的实例,将其转为Person抽象类的引用,而Child类就是我们在匿名内部类中隐藏的类,写成匿名类
最后的main方法中还可以省略一些,写成这样(效果是一样的):
public static void main(String[] args) {
new Person() {
public void eat() {
System.out.println("eat apple");
}
}eat();
}