匿名内部类中的接口如何工作?

interface MyInter { public void display(); } class OuterClass8 { public static void main(String arg[]) { MyInter mi=new MyInter() { public void display() { System.out.println("this is anonymous class1"); } }; mi.display(); } } 

据我所知,我们无法实例化一个接口,那么这是怎么发生的呢?

您不能实例化接口,但是您可以提供接口的实现接口的类的对象的引用,因此在代码中您实现接口并创建该类的对象并提供该类的引用。

通过声明

 MyInter mi=new MyInter(){ public void display() { System.out.println("this is anonymous class1"); } }; 

您正在声明一个实现MyInter接口的匿名内部类。 这跟做的很相似

 public class MyInterImpl implements MyInter { public void display() { System.out.println("this is anonymous class1"); } } 

并创建一个实例

 MyInterImpl mi = new MyInterImpl(); 

但你是匿名的。


您认为无法实例化接口是正确的。 你做不到

 MyInter mi = new MyInter(); 

但你可以做上面提到的。

是的,请记住,您无法实例化抽象类或接口..

这是错的:

 MyInter mi = new MyInter(); 

但您必须已经读过超类引用变量可以保存对子类对象的引用。

所以通过创造

 MyInter mi=new MyInter(){ public void display() { System.out.println("this is anonymous class1"); } }; 

你正在创建一个对象,一个匿名对象,但是MyInter作为超类。