没有显式封闭实例的非静态内部类对象创建

Shi*_*ari 4 java inner-classes

我读到没有外部类的实例就不能创建内部类的实例。但是,当我尝试使用它作为外部类的实例成员创建内部类的实例时,它起作用了。

我知道它是通过对外部类对象的引用来创建内部对象,但这是正确的方法吗?

下面是我的代码片段:

public class TestInner {
    private Nonstatic non = null;
    private static int access = 4;

    public class Nonstatic {
        void hello() {
            access = 90; 
        }
    }

    public static void main(String[] args) {
        TestInner outer = new TestInner();
        TestInner.Nonstatic innern= outer.new Nonstatic();
        System.out.println("Non static obj1 is "+innern);

        outer.testinnerObj();
    }

    public void testinnerObj() {
        non = new Nonstatic(); 
        System.out.println("Non static obj2 is "+non);
        non.hello();
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 5

你在写“没有外部类的实例就不能创建内部类的实例”。而这正是你正在做的。

首先,您创建一个“外部”类的实例:

TestInner outer = new TestInner();
Run Code Online (Sandbox Code Playgroud)

然后,您创建一个“内部”类的实例——它只存在于外部的范围内: TestInner.Nonstatic innern= outer.new Nonstatic();

因此,问题可能归结为:是的,您正在静态 main 方法中创建对象。但这并不重要,因为您正在使用在outer.new外部范围内创建它的语法。

希望有帮助。