外部类只能使用public
、
final
、
abstract
修饰,不能使用
private
、
protected
、
static
修饰,但是内部类可以。非静态内部类不能拥有静态成员。
内部类的作用:①
不允许同包的其他类访问该类;
②
内部类成员可以直接访问外部类私有数据;
③
匿名内部类适合用于创建那些仅需要使用一次的类。
非静态内部类
可以访问外部类的private
成员,但非静态内部类的成员不能被外部类直接使用,如需访问则必须要创建非静态内部类的对象进行访问。
非静态内部类访问变量x
,首先判断是否存在局部变量
x
,如果存在则使用该变量;如果没有,判断是否存在非静态内部类成员变量
x
,如果存在则使用该变量;如果没有,判断是否存在外部类成员变量
x
,如果存在则使用该变量;如果没有,系统出现编译错误。
如果外部类成员变量、内部类成员变量和局部变量重名,则通过外部类类名.this.
变量名、
this.
变量名和变量名区分。
静态内部类
,使用static
修饰的内部类,这种内部类属于外部类本身,而不是外部类的对象,因此又叫类内部类。
静态内部类可以包含静态成员和非静态成员。
静态内部类(即使时实例成员)不能访问外部类的实例成员,只能访问外部类的静态成员。
接口内部类只能时静态内部类。