内部类的两个要点:
1)内部类提供了更好的封装。只能让外部类直接访问,不允许同一个包中的其他类直
接访问。
2)内部类可以直接访问外部类的私有属性,内部类被当成其外部类的成员。但外部类
不能访问内部类的内部属性。|
注意:
内部类只是一个编译时概念,一旦我们编译成功,就会成为完全不同的两个类。对于一个名为Outer的外部类和其内部定义的名为Inner的内部类。编译完成后会出现Outer.class和Outer$Inner.class两个类的字节码文件。所以内部类是相对独立的一种存在,其成员变量/方法名可以和外部类的相同。
示例代码:
package innerClass;
public class Outer {
private int age =10;
public void show(){
System.out.println("Outer.show");
System.out.println(age);
}
public class Inner{ //这个就是Outer这个类的内部类,而Outer就叫Inner的外部类
int age =20;//内部类自己的属性
public void show(){//内部类自己的方法
System.out.println("Inner.show");
System.out.println(age);//内部使用自己的属性
System.out.println(Outer.this.age);//内部类访问外部类的的属性
Outer.this.show();//内部类访问外部类的的方法
}
}
}
package innerClass;
public class TestInner {
public static void main(String[] args) {
Outer o = new Outer();//创建外部类的对象,跟以前是一样的。
Outer.Inner i = new Outer().new Inner();//创建内部类的对象
i.show();
}
}