嵌套类中的Java对象实例化这有什么问题:
我很想理解为什么以下实例化无法编译:
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();
但它无法解释我的方法有什么问题,或者为什么必须使用这种替代语法
# 1 楼答案
在这种情况下,你不是从子类而是从内部类
因此,在本例中,要创建内部类的实例,需要外部类的实例,因此可以执行以下操作:
# 2 楼答案
创建内部类对象的语法如下
NOT
这个因为:
InnerClass
的实例只能存在于OuterClass
的实例中要实例化内部类,必须先实例化外部类。然后,使用以下语法在外部对象中创建内部对象:
Read Java Docs for more details
# 3 楼答案
new [enclosing class].[enclosed class](...)
习惯用法用于初始化静态嵌套类,即声明为其封闭类的static
成员的嵌套类{}习惯用法用于初始化内部类,即声明为其封闭类的实例成员的嵌套类
示例
和
您将使用:
new A.B()
new A().new C()
,或者使用名为a
的A
的给定实例a.new C()
注意