定义在一个类内部的类叫内部类,该类叫外部类。
外部类可以用常规的类访问方式,访问内部类的所有方法和属性,且外可以访问内部类的私有方法和属性。
内部类的标识符:每个类都有一个:类名.class文件,但内部类的名字是:外部类$内部类.class
1.实例化
内部类: 外部类 a = new 外部类(); //内部类更像是外部类的一个属性
外部类.内部类 str = a.new 内部类();
静态内部类:外部类.静态内部类 str = new 外部类.静态内部类();
且静态内部类可以有静态的成员和方法,而内部类不能有静态的成员和方法。
2.访问
静态内部类只能访问外部类的静态成员,而内部类则可以访问外部类的所有成员。(普通内部类的字段和方法只能放在外部层,因为访问权限的限制)
调用静态内部类的方法或静态变量,通过类名直接调用。(外部类.内部类.方法或静态变量)
内部类中的this指的是自己,在访问外部类时不需要特殊方式,而且能访问外部类的所有成员,如同内部类链接了外部类。
访问内部类时,需要先实例化外部类,通过外部类名.内部类名.xxx的方式访问。
3.内部类向上转型
内部类可以和其他类一样向上转型,内部类向上转型时是基类型。如果内部类是private修饰的,只可以被外部类访问就能完全隐藏实现细节。
4.方法内的类
方法内定义内部类时,不能加访问修饰符号,且这些内部类会被事先编译好。
5.静态内部类(又叫嵌套类)
当内部类加了static修饰符后就成了静态内部类。
a.实例化静态内部类时,不需要实例化外部类。
b.不能通过静态内部类的对象访问非静态成员。(静态内部类只能访问外部类的静态成员)
6.为什么要用内部类
a.只为外部类使用。
b.提供了进入外部类的方式
c.主要:无论外部类是否继承了某个类,内部类都能独立继承一个类,内部类使多继承的解决方式更加完善。