class MyClass {
}
public class Test {
public static void main(String[] args) {
MyClass g = new MyClass();
System.out.println(g.getClass()); //print MyClass
MyClass g2 = new MyClass(){};
System.out.println(g2.getClass()); //print Test$1
}
}
谁能给我解释一下:
- new MyClass(){} 到底是什么意思?
- 为什么输出不同?
最佳答案
当您在 new MyClass()
调用之后放置大括号时,这是对显式类进行子类化的匿名类的语法。 {}
是一个空类主体,因此没有任何内容被覆盖,也没有声明构造函数。
输出 Test$1
是不同的,因为匿名子类确实有一个隐式名称,它是封闭类 (Test
),然后是美元符号 $
,然后是序列号 (1
)。在编译Test.java
时,你可能会注意到除了Test.class
和MyClass.class
之外,还有Test1.class
也存在——匿名类的类文件。如果您要在 Test
类中声明另一个匿名子类,在您的第一个匿名子类之后,那么它将被命名为 Test$2
,无论它实际上是哪个类的子类。
关于java - 在 Java 中创建新实例的一种有趣方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34029058/