内部类:
整个内部类可以分为两大类,分别为属性内部类(该内部类是外部类的属性)和方法内部类(定义与方法中的)
一、局部内部类:
所谓局部内部类是指定义在类方法中的内部类,因此这种内部类也具有一些特殊的性质。局部内部类内部可以直接访问外部类的属性和方法,也可以直接访问该方法中的局部变量,但这些局部变量必须是用final定义的。
二、属性内部类:
属性内部类可以分为静态内部类和实例内部类。
静态内部类:
对于静态内部类,外部类只是提供了一个包(package)的作用,静态内部类的用法与外部类相同,此时静态内部类就相当于外部类的一个对象。因为静态内部类是static的,所以只能访问外部类的静态属性和方法。
实例内部类:
实例内部类就相当于外部类的一个普通的成员属性。
A、 实例内部类是依赖于外部类的,必须先创建外部类实例后,才能创建内部类实例。
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
B、 实例内部类的实例自动持有外部类的实例的引用,引用形式为Outer.this(外部类名点this),在内部类中可以直接访问外部类的所有属性和方法。
C、 外部类的实例与内部类的实例是一对多的关系,即一个内部类实例只能引用一个外部类实例,但一个外部类实例可以对应多个内部类实例。
D、 在外部类中不能直接访问内部类的成员,必须通过内部类的实例去访问。
E、 实例内部类不能定义静态成员,只能定义实例成员。
关于属性内部类的细节很多,参阅java基础与实例精解
匿名类:
也没有什么好说的,只可意会,不可言传。
注意:匿名内部类是个比较常用的东东。
整个内部类可以分为两大类,分别为属性内部类(该内部类是外部类的属性)和方法内部类(定义与方法中的)
一、局部内部类:
所谓局部内部类是指定义在类方法中的内部类,因此这种内部类也具有一些特殊的性质。局部内部类内部可以直接访问外部类的属性和方法,也可以直接访问该方法中的局部变量,但这些局部变量必须是用final定义的。
二、属性内部类:
属性内部类可以分为静态内部类和实例内部类。
静态内部类:
对于静态内部类,外部类只是提供了一个包(package)的作用,静态内部类的用法与外部类相同,此时静态内部类就相当于外部类的一个对象。因为静态内部类是static的,所以只能访问外部类的静态属性和方法。
实例内部类:
实例内部类就相当于外部类的一个普通的成员属性。
A、 实例内部类是依赖于外部类的,必须先创建外部类实例后,才能创建内部类实例。
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
B、 实例内部类的实例自动持有外部类的实例的引用,引用形式为Outer.this(外部类名点this),在内部类中可以直接访问外部类的所有属性和方法。
C、 外部类的实例与内部类的实例是一对多的关系,即一个内部类实例只能引用一个外部类实例,但一个外部类实例可以对应多个内部类实例。
D、 在外部类中不能直接访问内部类的成员,必须通过内部类的实例去访问。
E、 实例内部类不能定义静态成员,只能定义实例成员。
关于属性内部类的细节很多,参阅java基础与实例精解
匿名类:
也没有什么好说的,只可意会,不可言传。
注意:匿名内部类是个比较常用的东东。