内部类分四种:成员内部类、局部内部类、静态内部类和匿名内部类。
1.首先,把内部类作为外部类的一个特殊的成员来看待,因此它有类成员的修饰符:private ,protected,默认(friendly),public,static,final,abstract.
2.非静态内部类nested inner class,内部类隐含有一个外部类的指针this,它可以访问外部类的一切资源(包括私有);外部类访问内部类的成员,先要取得内部类的对象,并且取决于内部类成员的封装等级;且不能包含任何static成员.
3.静态内部类:static inner class,不再包含外部类的this指针,并且在外部类装载时初始化;静态内部类能包含static或非static成员;静态内部类只能访问外部类static成员;外部类访问静态内部类的成员,对于static成员,用类名.成员即可访问,对于非static成员,只能用对象.成员进行访问.
4.对于局部内部类只能访问块中或方法中的final变量。类成员有两种static , non-static,同样内部类也有这两种:
①.non-static 内部类的实例,必须在外部类的方法中创建或通过外部类的实例来创建(OuterClassInstanceName.new innerClassName(ConstructorParameter)),并且可直接访问外部类的信息,外部类对象可通过OuterClassName.this来引用
②.static 内部类的实例, 直接创建即可,没有对外部类实例的引用。
内部类不管static还是non-static都有对外部类的引用;non-static 内部类不允许有static成员.
方法中的内部类只允许访问方法中的final局部变量和方法的final参数列表,所以说方法中的内部类和内部类没么区别;但方法中的内部类不能在方法以外访问,方法中的不可以有static内部类.
5.匿名内部类是一种特殊的局部内部类,它是通过匿名类实现接口.
①,一个类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的事先或是覆盖.
②,只是为了获得一个对象实例,不需要知道其实际类型.
③,类名没有意义,也就是不需要使用到类名.
匿名内部类如果继承自接口,必须实现指定接口的方法,且无参数;匿名内部类如果继承自类,参数必须按父类的构造函数的参数传递 |