【问题标题】:How creation an instance of inner class works?创建内部类的实例如何工作?
【发布时间】:2019-06-20 07:17:04
【问题描述】:

当我创建内部类的实例时,我使用了这段代码。

OuterClass outerClass = new OuterClass();
OuterClass.InnerClass inerClass = outerClass.new InnerClass();

但我不明白outerClass.new InnerClass() 是如何工作的,为什么我们使用.new 就像新的内部类一样,我知道不是,但我不明白语法。

【问题讨论】:

  • 内部类的实例隐式引用其所有者类实例。如果你只是使用new OuterClass.InnerClass(),编译器怎么知道将哪个外部类实例传递给内部类实例?因此,Java 设计者必须决定一种语法,允许在新建内部类时指定外部类实例,这就是他们选择的语法。您在实践中很少使用该语法,因为内部实例通常是从外部类的方法/构造函数创建的。
  • 查看这个 oracle 文档,你会得到清晰的概念。 (docs.oracle.com/javase/tutorial/java/javaOO/nested.html)

标签: java


【解决方案1】:

内部类是 POJO。因此,当您查看目标目录时,您会看到 2(两个)类文件。 因此,要创建 内部类 的实例,请使用 new。

OuterClass outerClass = new OuterClass();  // create instance
OuterClass.InnerClass inerClass = outerClass.new InnerClass();  // innerClass has `this` to outerClass instance

这意味着InnerClass 不是静态的(即this 引用了OuterClass 的对象)并且应该在它之前创建OuterClass 的实例。

OuterClass.InnerClass inerClass = new OuterClass.InnerClass();

这意味着InnerClass 是一个静态的(即没有this 引用Outerlass 的对象),这意味着,这绝对是相同的(从JVM 的角度来看)就像两个单独的文件与@987654330 @ 和class InnterClass

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多