匿名内部类也就是没有名字的内部类,通常用来简化代码,而使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口。
下面给出例子:
实例1:不使用匿名内部类来实现接口
interface Person{
public void run();
}
public class Child implements Child {
@Override
public void run() {
System.out.println("实现接口");
}
}
public class Test {
public static void main(String[] args) {
Person person=new Child(){}
person.eat();
}
}
//运行结果:实现接口
可以看到,我们用Child实现了Person接口的run方法,在Test类中创建实例,调用方法。
但是,如果此处的Child类只使用一次,那么将其编写为独立的一个类岂不是很麻烦?
所以就有了匿名内部类:
interface Child{
public void eat();
}
public class Test {
public static void main(String[] args)
Child c = new Child() {
@Override
public void eat() {
System.out.println("接口实现匿名内部类");
}
};
c.eat();
}
}
//运行结果:接口实现匿名内部类
抽象类也是如此:
abstract class Person {
public abstract void eat();
}
public class Test {
public static void main(String[] args) {
Person p = new Person() {
public void eat() {
System.out.println("抽象类实现匿名内部类");
}
};
p.eat()
}
//运行结果:抽象类实现匿名内部类