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();
}
}
答案 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”,否则你无法实现接口。但我不知道如何在你的情况下发生命名冲突。