分类:
(1) 在类中定义一个类(私有内部类,静态内部类)
(2) 在方法中定义一个类(局部内部类,匿名内部类)
内部类是Java编译器一手操办的。虚拟机并不知道内部类与常规类有什么不同,
主要是编译器在编译的时候对内部类和外部类加以处理。
特点总结:
(1) 在类中方法外定义的非静态内部类:
● 内部类可互相访问外围类的所有成员。内部类对外围类可见,可以在外围类中创建内部类对象,引用内部类数据
● 内部类中不能定义静态成员变量。
// 在内部类中偷偷摸摸的创建了包可见构造器,从而使外部类获得了创建权限。
// 在外部类中偷偷摸摸的创建了访问私有变量的静态方法,从而 使 内部类获得了访问权限。
//这样,类中定义的内部类无论私有,公有,静态都可以被包围它的外部类所访问。
(2) 在类中方法外定义的静态内部类:
● 只能访问外部类的静态成员。//静态内部类无法得到其外围类对象的引用,那么自然也就无法访问外围类的非静态成员了。因此,静态内部类只能访问其//外围类的静态成员,除此之外与非静态内部类没有任何区别。
(3) 在方法中定义的局部内部类:
● 该内部类没有任何的访问控制权限 //修饰符无意义
● 外围类看不见方法中的局部内部类的,但是局部内部类可以访问外围类的任何成员。
● 方法体中可以访问局部内部类,但是访问语句必须在定义局部内部类之后。
● 局部内部类能访问方法体中的常量,即用final修饰的成员。//为了保持局部变量与局部内部类中备份域保持一致
(4) 在方法中定义的匿名内部类:
● 是一种特殊的局部内部类,没有构造器,取而代之的是将构造器参数传递给超类(接口或者父类)构造器。