
基础篇:JAVA内部类的使用介绍
目录
1 四种内部类
2 内部类的使用场景和优点
3 成员内部类
4 成员内部类的访问范围详解
5 静态内部类
6 局部内部类
7 匿名内部类
1 四种内部类
成员内部类
静态内部类
局部内部类
匿名内部类
2 内部类的使用场景和优点
内部类的优点:每个内部类都能独立地继承一个类(实现多个接口),无论外部类是否已经继承或者实现,对于内部类都没有影响。内部类的存在使得Java的多继承机制变得更加完善
在开发设计中会存在一些使用接口很难解决的问题,而类却只能继承一个父类。这个时候可以利用内部类去继承其他父类,及implements多个接口能力来解决。内部类使得多重继承的解决方案变得更加完整
3 成员内部类
成员内部类就像外部类的普通成员一样,可以访问外部类的属性及方法
成员内部类内部不允许存在任何静态变量或静态方法(static);因为成员内部类是属于对象的,而静态变量、静态方法会先于外部类的对象存在,因此不允许成员内部类存在静态属性、方法
成员内部类如果需在外部类的外部使用,则需通过调用外部类对象的普通方法创建
4 成员内部类的访问范围详解
编译器在进行编译的时候,会将成员内部类单独编译成一个字节码文件,下面是 OutClass.java 的代码
javap -v OutClass$InnerClass 反编译 OutClass$InnerClass.class,可以看反编译的一段代码如下:
可以看出成员内部类对象的创建依赖外部类的实例对象,在没有外部类实例之前是无法创建内部类的。因为非静态内部类对象存在一个指向外部类对象的引用;也因此成员内部类可以在随意访问外部类的成员
5 静态内部类
用static修饰的内部类称之为静态内部类,静态内部类和非静态内部类之间存在一个最大的区别;非静态内部类在编译完成之后会隐含的保存着一个引用,该引用是指向创建它的外围类,但是静态类没有
静态内部类的创建不需要依赖外部类可以直接创建
静态内部类不可以使用任何外部类的非static属性和方法
静态内部类可以存在自己的成员变量包括非静态和静态属性和方法
6 局部内部类
方法内部类不允许使用访问权限修饰符;public、private、protected均不允许
方法内部类对外部完全隐藏,除了创建这个类的方法可以访问它以外,其他地方均不能访问
方法的访问区域范围就是方法内部类可以访问的区域范围
7 匿名内部类
匿名内部类就是一个没有名字的方法内部类,因此特点和方法与方法内部类完全一致
匿名内部类必须继承一个抽象类或者实现一个接口
匿名内部类没有类名,因此没有构造方法
匿名内部类使得编码更加简洁
参考文章
Java 内部类详解
java提高篇(八)----详解内部类
Java内部类的定义
作者:shu21
来源:CSDN
