1.在内部类中,外部类名+.this是生成外部类对象的引用。此会在编译器受检,没有任何运行时开销。
package Inner;
public class DotThis {
void f(){System.out.println("DotThis.f()");}
public class Inner{
public DotThis outer(){
<span style="white-space:pre"> </span>return DotThis.this;
}
}
public Inner inner(){
return new Inner();
}
public static void main(String[] args) {
DotThis dt=new DotThis();
DotThis.Inner in=dt.inner();
in.outer().f();
}
}
运行结果:DotThis.f()
2.外部类对象的引用+.new生成与某个外部类对应的内部类的对象。
package Inner;
public class DotNew {
public class Inner{
public int f(){
return 11;
}
}
public static void main(String[] args) {
DotNew dt=new DotNew();
DotNew.Inner in=dt.new Inner();
System.out.println(in.f());
}
}
运行结果:11
由上可以总结出创建内部类对象有两种途径:
1)在内部类创建一个方法,该方法指向内部类的一个引用,如代码一中的inner()方法:
public Inner inner(){
return new Inner();
}
2)使用.new创建一个内部类对象,如代码二中:
DotNew dt=new DotNew();
DotNew.Inner in=dt.new Inner();