5)匿名内部类
当所在的方法的形参需要被内部类里面使用时,该形参必须为final,原因分析如下:
内部类对使用的参数进行了引用的拷贝,为了避免引用值发生改变,例如被外部类的方法修改等,而导致内部类
得到的值不一致,于是用final来 让该引用不可改变。
class Outer$Dosome{
public Dosome(final String a,final int b){
this.Dosome$a=a;
this.Dosome$b=b;
}
public void dosome(){
System.out.println(this.Dosome$a+this.Dosome$b);
}
}}
6)静态内部类:只能引用外部类的静态成员;
动态内部类:可以引用外部类所有成员(包括静态、动态、私有成员)
7)局部内部类---在方法内部定义的内部类
在方法内部定义的内部类没有访问修饰符,即方法内部类对包围它的方法之外的任何东西都不可见;
方法内部类只能访问该方法中的局部变量,而这些局部变量一定要是final修饰的常量。
静态内部类:不能访问外部类的动态成员;
动态内部类:不能声明静态成员(属性、方法...)
总结一下编译器对类中内部类做的手脚吧:
(1) 在内部类中偷偷摸摸的创建了包可见构造器,从而使外部类获得了创建权限。
(2) 在外部类中偷偷摸摸的创建了访问私有变量的静态方法,从而 使 内部类获得了访问权限。
这样,类中定义的内部类无论私有,公有,静态都可以被包围它的外部类所访问。