JAVA学习:成员内部类基本概念及用法
简单的说,内部类就是将一个类的定义放到另一个类的定义内部。内部类分为:成员内部类、局部内部类、静态内部类、匿名内部类。
成员内部类:作为外部类的一个成员存在,与外部类的属性、方法并列。
优点:一方面,内部类作为外部类的成员,可以访问外部类的私有成员或属性。(即使声明为private,但是对于处于其内部的内部类还是可见的。)另一方面,可以内部类定义在外部类不可访问的属性。这样就在外部类中实现了比外部类private还要小的额访问权限。
注意:
内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两个类。
对于一个名为Outer的外部类和其内部定义的名为Inner的内部类。编译完成后出现Outer.class 和 Outer$Inner.class 两个类
当Outer是一个private类时,外部类对于其外部访问是私有的,所以就无法建立外部类对象,进而也无法建立内部类对象。
局部内部类
在方法中第一的内部类称为局部内部类。
与局部变量类似,在局部内部类前不加修饰符public和private,其范围为定义它的代码块
注意:
在类外不可直接生产局部内部类(保证局部内部类对外是不可见的)。
要想使用局部内部类时需要生产对象,对象调用方法,在方法中才能调用局部内部类。
通过内部类和接口达到一个强制的弱耦合,用局部内部类来实现接口,并在方法中返回接口类型,使局部内部类不可见,屏蔽实现类的可见性。
静态内部类
静态内部类可以使用public,protected,private修饰
静态内部类中可以定义静态和非静态的成员
注意:
一个静态内部类不需要一个外部类的成员:只是静态内部类和成员内部类的区别。静态内部类的对象可以直接生成
这实际上静态内部类成为了一个顶级类。
静态内部类不可用private来进行定义。
当类与接口(或者是接口与接口)发生方法命名冲突的时候,此时必须使用内部类来实现。用接口不能完全地实现多继承,用接口配合内部类才能实现真正的多继承。
匿名内部类
匿名内部类就是没有名字的内部类。
注意:
匿名内部类不能有构造函数
匿名内部类不能定义任何静态成员、方法和类
匿名内部类不能是public、protected、private、static
只能创建匿名内部类的一个实例
一个匿名内部类用其隐含实现一个接口或实现一个类。
因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。
本文出自seven的测试人生公众号最新内容请见作者的GitHub页:http://qaseven.github.io/
相关文章
- java虚拟机学习-Java常量池理解与总结(13-2)
- java虚拟机学习-JVM内存管理:深入垃圾收集器与内存分配策略(4)
- Java学习之java高级特性
- java理论基础学习二
- Java 构造方法
- Solr 报错:java.lang.NoClassDefFoundError: org/apache/http/entity/mime/content/ContentBody
- JAVA学习第五十一课 — IO流(五)流的操作基本规律
- Predicate和Consumer接口– Java 8中java.util.function包下的接口
- 《Java遗传算法编程》—— 2.8 交叉实现
- 《21天学通Java(第7版)》—— 1.6 总结
- 基于Java+MySQL实现(Web)在线题库管理系统【100010067】
- 1. java.util.concurrent - Java 并发工具包
- 基于 Android NDK 的学习之旅-----Java 调用C
- Java实现微信菜单json字符串拼接
- Error running 'dt-assets-monitor [clean]': Cannot run program "C:Program Files (x86)Javajdk1.8.0_73binjava.exe" (in directory "E:codedt-assets-monitor")
- Java学习-084-java.sql.SQLException: Zero date value prohibited 问题解决
- 【转】Java学习---快速掌握RPC原理及实现
- 华为OD机试 -字符串筛选排序(Java) | 机试题+算法思路+考点+代码解析 【2023】
- JAVA学习:成员内部类基本概念及用法
- java: Internal error in the mapping processor: java.lang.NullPointerException解决方案
- Java 学习笔记