了解 Java 中的内部 class
Understanding inner class in Java
考虑以下 class:
package test;
public class Container {
public class Contained {
public void foo() {
System.out.println("printed");
}
}
}
和 Main.java:
package test;
public class Main {
public static void main(String[] args){
Container c = new Container();
}
}
因此,我们在这里创建了 Container
class 的实例。这是否意味着我们还创建了内部 class 的实例?我想,是的,因为内部 class 是一个 non-static
嵌套 class。但是我们如何才能访问到内部 class 的实例呢?我们可以在 Container
class 之外创建实例吗?
如果您提供一些对 JLS 的参考,将会非常有用。
要实例化内部 class,您必须首先实例化外部 class。然后,使用以下语法在外部对象中创建内部对象:
OuterClass.InnerClass innerObject = outerObject.new InnerClass();
所以在你的情况下它将是
Container container = new Container();
Container.Contained containedClass = container.new Contained();
这叫做内Class。在内部 class 您可以访问容器 class 成员
要为静态嵌套 class 创建对象,请使用以下语法:
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
这称为静态嵌套 Class。在静态嵌套 Class 中,您无法访问容器 class 实例成员,只能访问静态成员
创建 Container
的实例不会创建 Contained
class 的实例,因为可以有许多 Contained
的实例与同一个实例相关联Container
个。您显式创建 Contained
的实例。
是的,您可以在 Container
class 之外创建一个实例,方法是指定将与之关联的 Container
的实例:
Container cr = new Container();
Container.Contained cd = cr.new Contained ();
内部 classes 在 JLS 8.1.3 中描述。
考虑以下 class:
package test;
public class Container {
public class Contained {
public void foo() {
System.out.println("printed");
}
}
}
和 Main.java:
package test;
public class Main {
public static void main(String[] args){
Container c = new Container();
}
}
因此,我们在这里创建了 Container
class 的实例。这是否意味着我们还创建了内部 class 的实例?我想,是的,因为内部 class 是一个 non-static
嵌套 class。但是我们如何才能访问到内部 class 的实例呢?我们可以在 Container
class 之外创建实例吗?
如果您提供一些对 JLS 的参考,将会非常有用。
要实例化内部 class,您必须首先实例化外部 class。然后,使用以下语法在外部对象中创建内部对象:
OuterClass.InnerClass innerObject = outerObject.new InnerClass();
所以在你的情况下它将是
Container container = new Container();
Container.Contained containedClass = container.new Contained();
这叫做内Class。在内部 class 您可以访问容器 class 成员
要为静态嵌套 class 创建对象,请使用以下语法:
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
这称为静态嵌套 Class。在静态嵌套 Class 中,您无法访问容器 class 实例成员,只能访问静态成员
创建 Container
的实例不会创建 Contained
class 的实例,因为可以有许多 Contained
的实例与同一个实例相关联Container
个。您显式创建 Contained
的实例。
是的,您可以在 Container
class 之外创建一个实例,方法是指定将与之关联的 Container
的实例:
Container cr = new Container();
Container.Contained cd = cr.new Contained ();
内部 classes 在 JLS 8.1.3 中描述。