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
}
}
有人可以向我解释一下:
答案 0 :(得分:5)
在new MyClass()
调用之后放置大括号时,这是将显式类子类化的匿名类的语法。 {}
是一个空类主体,因此不会覆盖任何内容,也不会声明任何构造函数。
输出Test$1
是不同的,因为匿名子类确实有一个隐式名称,即封闭类(Test
),然后是一个美元符号$
,然后是一个序列号( 1
)。在编译Test.java
时,您可能会注意到除了Test.class
和MyClass.class
之外,Test1.class
也存在 - 匿名类的类文件。如果你要在Test
类中声明另一个匿名子类,在你的第一个匿名子类之后,它将被命名为Test$2
,无论它实际上是哪个类的子类。
答案 1 :(得分:2)
MyClass g = new MyClass();
,这会创建Myclass
。
while,MyClass g = new MyClass(){};
使用匿名类扩展Myclass
。
请阅读:https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html
答案 2 :(得分:0)
新的MyClass(){}实际意味着什么?
这意味着您创建了一个新的MyClass子类,它没有任何名称。这就是为什么它被称为匿名课程。
Anonymous类引用Parent类的引用变量。在这里,g。
例如,
A类{ }
//somewhere i wrote like,
Class A = new A(){...};
Means new A(){...} is subclass of A.
for example, Class B extends A{...}, in this case Class B is sub class of A.
所以最终这个类是A的子类,它没有任何 名称,它被称为匿名类。
所以请记住,在这里您查询的是匿名[无名]。