这似乎是从界面创建一个对象;它是如何工作的?

时间:2010-10-16 04:39:03

标签: java interface object

interface Int {
    public void show();
}

public class Test {     
    public static void main(String[] args) {
        Int t1 = new Int() {
            public void show() {
                System.out.println("message");
            }
        };

        t1.show();
    }
}

4 个答案:

答案 0 :(得分:18)

您正在定义一个实现接口Int的匿名类,并立即创建一个thatAnonymousClassYouJustMade类型的对象。

答案 1 :(得分:8)

这种表示法是

的简写
Int t1 = new MyIntClass();

// Plus this class declaration added to class Test
private static class MyIntClass implements Int
    public void show() {
        System.out.println("message");
    }
}

所以最后你要创建一个具体类的实例,它的行为是你内联定义的。

您也可以通过为内联的所有抽象方法提供实现来实现抽象类。

答案 2 :(得分:4)

匿名内部类的这种特殊语法是创建一个名为Test$1的类。您可以在Test类旁边的类文件夹中找到该类文件,如果您打印t1.getClass().getName(),您也可以看到它。

答案 3 :(得分:0)

我认为你的对象与界面无关。如果你注释掉整个界面,你仍然会得到相同的输出。它只创建了一个匿名类。我认为,除非你使用类“implements”,否则你无法实现接口。但我不知道如何在你的情况下发生命名冲突。