成员内部类寄生在外部类中,因此可以访问外部类的所有成员和方法而不受修饰符限制。因为内部类是通过实例引用来和外部类建立关系的,成员内部类的成员和方法不能用static修饰。
内部类可以用private修饰,而外部类是不能使用private修饰的。如果内部类仅仅在类内部使用时,使用private修饰后,就可以更好的隐藏内部信息。
public class Outer{
private int num;
private Inner inner = null;
Outer(int num){
this.num = num;
inner = new Inner(); //外部类访问内部类的成员必须先创建一个内部类实例
}
public Inner getInnerInstance(){
if(inner == null) inner = new Inner();
return inner;
}
public void printer(){
System.out.println("Outer:"+num);
System.out.println("Inner:"+inner.num);
}
public class Inner{
private int num;
Inner(){
num = Outer.this.num; //访问外部类的同名变量
}
}
}
成员内部类是依附外部类而存在的,因此如果要创建成员内部类的对象,前提是必须存在一个外部类的对象。
public class Test {
public static void main(String[] args) {
Outer outer = new Outer();
//第一种方式:
Outer.Inner inner = outer.new Inner(); //必须通过Outer对象来创建
//第二种方式(推荐使用):
Outer.Inner inner = outer.getInnerInstance();
}
}