class OuterClass{
public static void main(String[] args){
//@new InnerClass();//调用的是this.new InnerClass();
OuterClass oc=new OuterClass();
InnerClass ocic=oc.new InnerClass();
ocic.show();
OuterClass o=ocic.getOuterClass();
if(o==oc)System.out.println("Same object!");
}
class InnerClass{
//不能含有static方法 所以也不能含有main
void show(){
System.out.println("show");
}
OuterClass getOuterClass(){
return OuterClass.this;
}
}
}
class Anotherclass{
public static void main(String[] args){
//@new OuterClass.InnerClass();
OuterClass oc=new OuterClass();
OuterClass.InnerClass ocic=oc.new InnerClass();
ocic.show();
}
}
如果把两行带注释的语句前的//@去掉 将得到如下错误:
outer.java:3: non-static variable this cannot be referenced from a static context
new InnerClass();
^
outer.java:23: an enclosing instance that contains OuterClass.InnerClass is
required
new OuterClass.InnerClass();
^
证实了:
1。非static内部类有一个指向外围类的引用
2。创建非static内部类需要一个外围类对象