一种在Java中创建新实例的有趣方法
谁能给我解释一下:一种在Java中创建新实例的有趣方法,java,constructor,Java,Constructor,谁能给我解释一下: 新的MyClass(){}实际上意味着什么 为什么输出不同 MyClass g=新的MyClass(),这将创建Myclass的对象 而,MyClass g=newmyclass(){}正在使用匿名类扩展Myclass 请阅读:MyClass g=newmyclass(),这将创建Myclass的对象 而,MyClass g=newmyclass(){}正在使用匿名类扩展Myclass 请阅读:当您在新MyClass()调用后放置大括号时,这是显式类的子类的匿名类的语法。{}
MyClass g=新的MyClass()代码>,这将创建Myclass
的对象
而,MyClass g=newmyclass(){}
正在使用匿名类扩展Myclass
请阅读:MyClass g=newmyclass()代码>,这将创建Myclass
的对象
而,MyClass g=newmyclass(){}
正在使用匿名类扩展Myclass
请阅读:当您在新MyClass()调用后放置大括号时,这是显式类的子类的匿名类的语法。{}
是一个空的类主体,因此不重写任何内容,也不声明任何构造函数
输出Test$1
不同,因为匿名子类确实有一个隐式名称,即封闭类(Test
),然后是一个美元符号$
,然后是一个序列号(1
)。编译Test.java
时,您可能会注意到除了Test.class
和MyClass.class
之外,Test1.class
还存在匿名类的类文件。如果您要在Test
类中声明另一个匿名子类,在第一个匿名子类之后,那么它将被命名为Test$2
,无论它实际上是哪个类的子类。当您在new MyClass()
调用后放置大括号时,这是对显式类进行子类化的匿名类的语法。{}
是一个空的类主体,因此不重写任何内容,也不声明任何构造函数
输出Test$1
不同,因为匿名子类确实有一个隐式名称,即封闭类(Test
),然后是一个美元符号$
,然后是一个序列号(1
)。编译Test.java
时,您可能会注意到除了Test.class
和MyClass.class
之外,Test1.class
还存在匿名类的类文件。如果您要在Test
类中声明另一个匿名子类,在您的第一个匿名子类之后,那么它将被命名为Test$2
,无论它实际上是哪个类的子类。新的MyClass(){}实际上意味着什么?
这意味着您已经创建了MyClass的一个子类,它没有任何名称。这就是为什么它被称为匿名类
匿名类通过父类的引用变量引用。给你,g
比如说,
甲级{
}
所以最终这个类是A的子类,它没有任何
名字,它叫匿名类
所以请记住,这里的查询是匿名的[没有名字]
新建MyClass(){}实际上意味着什么?
这意味着您已经创建了MyClass的一个子类,它没有任何名称。这就是为什么它被称为匿名类
匿名类通过父类的引用变量引用。给你,g
比如说,
甲级{
}
所以最终这个类是A的子类,它没有任何
名字,它叫匿名类
所以请记住,这里的查询是匿名的[没有名字]
这是一个匿名类。这是一个匿名类。我有点困惑。如果g是MyClass的子类(这就是为什么它能够重写MyClass中的任何方法),为什么g.getClass.getName()没有返回MyClass?变量g
引用匿名类的实例,该类是对象的运行时类型。(第二个g
;您重新声明了g
)getClass
方法返回与调用它的对象的运行时类型相对应的Class
对象。我在这里有点困惑。如果g是MyClass的子类(这就是为什么它能够重写MyClass中的任何方法),为什么g.getClass.getName()没有返回MyClass?变量g
引用匿名类的实例,该类是对象的运行时类型。(第二个g
;您重新声明了g
)getClass
方法返回与调用它的对象的运行时类型相对应的Class
对象。
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
}
}
//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.