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{
}
void f(){
这里可以直接引用外部类的属性
}
static void g(){
//静态方法,是不可以调用非静态的属性;静态代码块是在类加载的时候,就开始加载了
Outer.Inner in = new Outer().new Inner();
}
}
------其他解决方案--------------------------------------------------------
没看懂 关注此贴
只会用不知道为什么
------其他解决方案--------------------------------------------------------
static的方法不能访问非static的内部类,这跟static方法不能访问非static成员变量是同个道理。但这里如果定义一个新的对象,然后用对象来访问内部类是被允许的。
------其他解决方案--------------------------------------------------------
外部对象没实例化,如何调用内部对象?
------其他解决方案--------------------------------------------------------
这个有啥疑问呢
------其他解决方案--------------------------------------------------------
认真一看好像有问题诶,这题
------其他解决方案--------------------------------------------------------
void f(){