Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一种在Java中创建新实例的有趣方法_Java_Constructor - Fatal编程技术网

一种在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(){}实际上意味着什么
  • 为什么输出不同

  • 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.