成员内部类
编译后也同样生成独立的.class
文件
访问权限
内部用外部可以随意访问,外用内必须用new创建后使用(与普通类一致)
方法调用
间接调用:调用外部类对象的成员方法对内部类成员方法进行调用
直接调用:用.
运算符链式调用
成员变量重名问题
如果成员内部类的成员变量和外部类的成员变量发生重名,调用规则为
- 调用外部类成员变量:
外部类名称.this.外部类成员变量名
- 调用内部类本身成员变量:
this.内部类成员变量名
局部内部类
只能在所属的方法内进行使用,出了之后就不可以再使用了,也不可以被方法将该类的对象进行返回
如果局部内部类要对方法中的局部变量进行访问,那么这个局部变量就必须是有效的final,即可以不用final
修饰符进行修饰,但在被局部内部类访问之后直到这个变量的生存期结束都不可以对该变量进行修改。
因为局部变量的储存在栈内存中,在方法退出之后其生存期已经结束,而局部内部类用new
关键字进行对象创建,储存在堆内存中,两者的生存期不一致,因此有这个限制。
匿名内部类
若某个类就使用一次而已,就直接new
关键字后接大括号进行写就行
如果要对接口进行实现,就接一个接口名称,再接大括号,然后当作一个实现该接口的类进行书写就行
权限修饰符注意事项
外部类只能用public
或(default)
成员内部类:四种权限修饰符都可以
局部内部类:不能写