没有显式封闭实例的非静态内部 class 对象创建
Non static inner class object creation without explicit enclosing instance
我读到,如果没有外部 class 的实例,则无法创建内部 class 的实例。但是当我尝试创建我的内部 class 的实例并将其用作我的外部 class 的实例成员时,它起作用了。
我知道它是通过引用我的外部 class 对象来创建内部对象,但这样做是否正确?
下面是我的代码片段:
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();
}
}
您正在写 "An instance of Inner class cannot be created without an instance of outer class"。而这正是您正在做的。
首先,您创建 "outer" class:
的一个实例
TestInner outer = new TestInner();
然后,您创建 "inner" class 的实例 - 它只存在
在外部范围内:
TestInner.Nonstatic innern= outer.new Nonstatic();
所以,问题可能归结为:是的,您正在静态 main 方法中创建对象。但这并不重要,因为您使用的是在 outer.
范围内创建它的语法 outer.new
希望对您有所帮助。
我读到,如果没有外部 class 的实例,则无法创建内部 class 的实例。但是当我尝试创建我的内部 class 的实例并将其用作我的外部 class 的实例成员时,它起作用了。
我知道它是通过引用我的外部 class 对象来创建内部对象,但这样做是否正确?
下面是我的代码片段:
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();
}
}
您正在写 "An instance of Inner class cannot be created without an instance of outer class"。而这正是您正在做的。
首先,您创建 "outer" class:
的一个实例TestInner outer = new TestInner();
然后,您创建 "inner" class 的实例 - 它只存在
在外部范围内:
TestInner.Nonstatic innern= outer.new Nonstatic();
所以,问题可能归结为:是的,您正在静态 main 方法中创建对象。但这并不重要,因为您使用的是在 outer.
范围内创建它的语法outer.new
希望对您有所帮助。