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

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

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

这种表示法是简写

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

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

您也可以通过为内联的所有抽象方法提供实现来使用抽象类来完成此操作。

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

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