java - 理解Java中的内部类

标签 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 类的实例。这是否意味着我们也创建了内部类的实例?我想,是的,确实如此,因为内部类是一个非静态嵌套类。但是我们怎样才能访问内部类的实例呢?我们可以在 Container 类之外创建实例吗?

如果您提供一些对 JLS 的引用,将会非常有用。 .

最佳答案

要实例化内部类,必须先实例化外部类。然后,使用以下语法在外部对象中创建内部对象:

OuterClass.InnerClass innerObject = outerObject.new InnerClass();

所以在你的情况下它会是

Container container = new Container();
Container.Contained containedClass = container.new Contained();

这称为内部类。在内部类中您可以访问容器类成员

要为静态嵌套类创建对象,请使用以下语法:

 OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();

这称为静态嵌套类。在静态嵌套类中,您无法访问容器类实例成员,只能访问静态成员

关于java - 理解Java中的内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27763368/

相关文章:

java - 如何设置最大字段输入

java - 如果列表包含两个类对象,请执行某些操作

Java静态方法: Create object of current type

具有类成员的 C++ 模板类

Java Mac 应用程序失败,错误代码为 -10810

java - 使用java驱动程序在Mongodb中存在多个文档的查询

java - 已请求第 1 页,但文档只有 0 页

具有静态数组值对的 Java 类

python - 在 Python 中为 Enum 类创建属性

r - Integer64 类无法在 reshape2 熔体函数中幸存