关于内部类的实例化public class Outer {public class Inner{}void f(){new Inner()//此处为什么不用创建
关于内部类的实例化
public class Outer { public class Inner{
} void f(){ new Inner();//此处为什么不用创建外部类实例就能创建内部类实例 } static void g(){ //在静态方法中为什么要先创建外部类实例才能创建内部类的实例
Outer.Inner in = new Outer().new Inner(); } }
[最优解释] Outer outerObject = new Outer();
Inner innerObject = new outerOjbect.Inner();
Inner.class 对象属于 outerOjbect对象,不属于 Outer.class 对象
----------------------- 如果是 static Inner
Inner.class 对象不属于 outerOjbect对象,属于 Outer.class 对象 Inner innerObject = new Outer.Inner();
[其他解释] void f(){ new Inner();//此处为什么不用创建外部类实例就能创建内部类实例 } 因为这相当于是外部类的成员函数,隐含了this
static void g(){ //在静态方法中为什么要先创建外部类实例才能创建内部类的实例
Outer.Inner in = new Outer().new Inner(); } 因为static函数不输入某个具体的对象,而是属于整个类。所以必须得创建外部类的一个对象
[其他解释] 恩,完全可以将new Inner()当成是一个内部的方法来看待,因为在定义的时候采用的是非static 的所以在static方法中必须要新建一个实例在创建对应实例的内部类。而在non-static中相当于采用了this. [其他解释] public class Outer { public class Inner{