Java 来自嵌套 class 的对象实例化 - 这有什么问题:
Java object instantiation from nested class - What's wrong with this:
我很想了解为什么以下实例无法编译:
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](...)
习惯用法用于初始化静态嵌套classes,即嵌套classes被声明为它们封闭[=]的static
成员50=]。
[enclosing class instance].new [enclosed class](...)
习惯用法用于初始化内部classes,即声明为实例的嵌套classes他们封闭的成员 class。
例子
与...
class A {
static class B {}
class C {}
}
您将使用:
new A.B()
new A().new C()
,或给定的 A
实例称为 a
,
a.new C()
备注
创建内部 class 对象的语法是
InnerClass innerObj = new OuterClass().new InnerClass();
NOT
Superclass.Subclass myObject = new Superclass.Subclass();
因为:
InnerClass
的实例只能存在于 OuterClass
.
的实例中
要实例化内部 class,您必须首先实例化外部 class。然后,使用 语法在外部对象中创建内部对象:
InnerClass innerObj = new OuterClass().new InnerClass();
在这种情况下,你不会从子 class 说话,而是从内部 class 说话....
所以,在这种情况下,要创建内部 class 的实例,您需要外部 class 的实例,因此您可以:
public class Foo {
public static void main(String[] args) {
Foo myFooObject = new Foo();
Foo.InnerClass myFooInnerClass = myFooObject.new InnerClass();
System.out.println(myFooObject);
System.out.println(myFooInnerClass);
}
class InnerClass {
@Override
public String toString() {
return "Am inner class";
}
}
}
我很想了解为什么以下实例无法编译:
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](...)
习惯用法用于初始化静态嵌套classes,即嵌套classes被声明为它们封闭[=]的static
成员50=]。
[enclosing class instance].new [enclosed class](...)
习惯用法用于初始化内部classes,即声明为实例的嵌套classes他们封闭的成员 class。
例子
与...
class A {
static class B {}
class C {}
}
您将使用:
new A.B()
new A().new C()
,或给定的A
实例称为a
,a.new C()
备注
创建内部 class 对象的语法是
InnerClass innerObj = new OuterClass().new InnerClass();
NOT
Superclass.Subclass myObject = new Superclass.Subclass();
因为:
InnerClass
的实例只能存在于 OuterClass
.
要实例化内部 class,您必须首先实例化外部 class。然后,使用 语法在外部对象中创建内部对象:
InnerClass innerObj = new OuterClass().new InnerClass();
在这种情况下,你不会从子 class 说话,而是从内部 class 说话....
所以,在这种情况下,要创建内部 class 的实例,您需要外部 class 的实例,因此您可以:
public class Foo {
public static void main(String[] args) {
Foo myFooObject = new Foo();
Foo.InnerClass myFooInnerClass = myFooObject.new InnerClass();
System.out.println(myFooObject);
System.out.println(myFooInnerClass);
}
class InnerClass {
@Override
public String toString() {
return "Am inner class";
}
}
}