一、内部类分类
1、静态内部类
-
静态内部类可以有静态成员,非静态内部类不可以
-
静态内部类可以访问外部类的静态成员,而不可以访问非静态成员
-
静态内部类的非静态成员可以访问外部类的分静态变量
-
静态内部类的创建不依赖与外部类,而非静态内部类必须依赖外部类实例
2、非静态内部类
非静态内部类又分为:成员内部类、方法内部类、匿名内部类
1)成员内部类
最常见的内部类。
2)局部内部类(方法内部类)
如果一个内部类只在一个方法中使用到了,那么我们可以将这个类定义在方法内部,这种内部类被称为局部内部类。
-
局部内部类不允许使用访问修饰符
-
局部内部类对外完全隐藏,只有创建了这个类的方法可以访问
-
可以引用成员变量,但必须使用final修饰,内部不允许修改该变量的值(如果是引用类型,只是不允许修改引用地址)
3)匿名内部类
-
匿名内部类没有访问修饰符
-
匿名内部类没有构造方法,因为没有名字
-
匿名内部类必须继承一个抽象类或者实现一个接口
-
不能存在静态成员和方法
-
与局部内部类相同,可以引用成员变量,但必须声明为final (在Java8中已经去掉要对final的修饰限制,但其实只要在匿名内部类使用了,该变量还是会自动变为final类型(只能使用,不能赋值)。)