从嵌套类实例化 Java 对象 - 这有什么问题 :

标签 java object instantiation inner-classes

我很想了解为什么以下实例无法编译:

Superclass.Subclass myObject = new Superclass.Subclass();

错误消息如下:

No enclosing instance of type Superclass is accessible. Must qualify the allocation with an enclosing instance of type Superclass (e.g. x.new A() where x is an instance of Superclass).

封闭实例是什么意思?为什么这是必要的?

这条消息似乎表明语法必须是:

Superclass mySuperObj = new Superclass();
Superclass.Subclass mySubObj = mySuperObj.new Subclass();

但它无法解释我的方法有什么问题或者为什么必须使用这种替代语法。

最佳答案

new [enclosing class].[enclosed class](...) idiom 用于初始化静态嵌套类,即声明为 static 的嵌套类。他们封闭类(class)的成员。

[enclosing class instance].new [enclosed class](...) idiom 用于初始化内部类,即声明为其封闭类的实例成员的嵌套类。

示例

与...

class A {
    static class B {}
    class C {}
}

您将使用:

  • new A.B()
  • new A().new C() ,或者给定的 A 实例叫a ,
  • a.new C()

注意

关于从嵌套类实例化 Java 对象 - 这有什么问题 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45736285/

相关文章:

java - Eclipse Juno 插件项目中的 mysql jdbc 连接错误

java - 将文本字符串读入二维数组

python - 遍历对象字典

java - 在由另一个类填充的类中使用数组字段时遇到问题

java - 我想编写代码来用Java更新mysql数据。这是我的代码。它给出这样的错误 :

java - 使用oracle webservices代理时出现错误: java. lang.NoClassDefFoundError: org/codehaus/stax2/XMLInputFactory2

java - 运行批处理脚本时自动关闭对话框

c# - 如何创建一个我可以使用的类的实例在 c# 中不止一个地方

c++ - 构造函数带参数时如何实例化模板类

用于创建类实例的 C# 快捷符号