Bin*_*Bin 40 java inner-classes
这是代码
public class Stack
{
private class Node{
...
}
...
public static void main(String[] args){
Node node = new Node(); // generates a compiling error
}
}
Run Code Online (Sandbox Code Playgroud)
错误说:
无法从静态上下文引用非静态类Node
为什么我不应该在main()方法中引用Node类?
Emi*_*Sit 58
Java中的非静态嵌套类包含对父类实例的隐式引用.因此,为了实例化a Node,你还需要一个实例Stack.在静态上下文(主方法)中,没有Stack要引用的实例.因此编译器表明它不能构造一个Node.
如果你创建Node一个静态类(或常规外部类),那么它将不需要引用,Stack并且可以直接在静态main方法中实例化.
有关详细信息,请参阅Java语言规范,第8章,例如Example 8.1.3-2.
Sub*_*der 11
非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有.静态嵌套类无权访问封闭类的其他成员.作为OuterClass的成员,可以将嵌套类声明为private,public,protected或package private.
要实例化内部类,必须首先实例化外部类.然后,使用以下语法在外部对象中创建内部对象:OuterClass.InnerClass innerObject = outerObject.new InnerClass();
public static void main(String[] args){
Stack stack = new Stack();
Stack.Node node = new Stack().new Node();
}
Run Code Online (Sandbox Code Playgroud)
要么
public class Stack
{
private class Node{
...
}
...
...
...
public static void main(String[] args){
Node node = new Stack().new Node();
}
}
Run Code Online (Sandbox Code Playgroud)