【发布时间】:2018-02-22 07:30:22
【问题描述】:
class Outer{
int i = 60;
class Inner{
void display(){
System.out.println(i);
}
}
public static void main(String args[]){
Inner o = new Inner();
o.display();
}
}
Main 函数确实实例化了它的非静态类,而在实例化内部类(非静态)时,java 编译器会出现错误(如上面的代码)。为什么?
编辑:我不是在问如何实例化内部类。我只是想要一个合乎逻辑的原因,为什么main() 没有实例化它的内部类,而下面的函数却这样做了。
class Outer{
int i = 60;
void show(){
Inner k = new Inner();
k.display();
}
class Inner{
void display(){
System.out.println(i);
}
}
public static void main(String args[]){
Outer o = new Outer();
o.show();
}
}
【问题讨论】:
-
你应该有一个
Outer实例的引用以在其上创建一个Inner:new Outer().new Inner() -
编辑:我不是在问如何实例化内部类...答案与您的编辑完全一样:它创建了
Outer类的实例跨度> -
您可以将嵌套类视为类似于方法的东西。如果没有包含该方法的类对象,则不能使用非静态方法。与内部类相同。要创建内部类的实例,您需要外部类的实例,例如
Outer ou = new Outer(); Inner in = ou.new Inner();。这样做的原因是内部类可以访问其外部实例的所有成员(甚至是私有成员),因此它必须知道它应该能够访问哪个外部实例。当您调用ou.new Inner()时会发生这种情况,对Outer实例的引用保存在创建的Inner实例中。 -
问题是在
static上下文中没有this。这也在重复问题中进行了解释。您可能只阅读了已接受的答案,您还应该查看stackoverflow.com/a/12691179 之类的答案
标签: java