匿名内部类也就是没有名字的内部类,通常用来简化代码,而使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口。
下面给出例子:
实例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() } //运行结果:抽象类实现匿名内部类