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

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

4

3 回答 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();

但是您可以执行上面介绍的操作。

于 2013-10-10T04:56:37.280 回答
3

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

于 2013-10-10T05:07:25.440 回答
2

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

这是错误的:

MyInter mi = new MyInter();

但你一定读过超类引用变量可以保存对子类对象的引用。

所以通过创建

MyInter mi=new MyInter(){

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

您正在创建一个对象,一个匿名对象,但是将 MyInter 作为超类..

于 2013-10-10T05:13:23.137 回答