2013-10-10 95 views
3
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(); 
    } 
} 

据我所知,我们不能实例化一个接口,那么这是怎么发生的?匿名内部类中的接口如何工作?

+0

检查在以下链接社区维基:HTTP://计算器.COM /问题/ 355167 /如何,都-匿名内部类使用的功能于Java的 – user2339071

回答

3

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

3

通过声明

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(); 

但你可以做上面介绍的。

2

是,记住,你不能实例化一个抽象类或接口..

这是错误的:

MyInter mi = new MyInter(); 

,但你一定读了一个超类引用变量可以容纳引用子类对象。

所以通过创建

MyInter mi=new MyInter(){ 

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

你创建了一个对象,一个匿名对象,但是这有MyInter作为超..