- 概念
在类的内部再定义一个完整的类
内部类编译之后会生成独立的.class文件
内部类可以访问外部类的私有成员,而不破坏封装
可以为外部类提供必要的功能组件
- 分类
划分规则:内部类定义的位置
成员内部类 、 静态内部类 、 局部内部类 、 匿名内部类
- 成员内部类 【了解】
外部类的一个成员部分 , 创建内部类对象必须依赖于外部类对象
语法:
Outer outer = new Outer()
Outer.Inner in = outer. new Inner();
访问:
通过this. 访问内部类的成员变量
通过外部类名.this. 访问外部类的成员变量
注意:成员内部类中不能定义静态成员
- 静态内部类
不需要外部类对象,可以直接创建内部类对象
语法:Outer.Inner in = new Outer.Inner();
静态内部类可以定义静态成员 , 通过外部类名.内部类名.成员 直接访问
语法:Outer.Inner.staticFiled | Outer.Inner.staticMethod()
静态内部类中无法直接访问外部类的非静态成员,因为此时外部类可能未创建对象,初始化属性
- 局部内部类
1、定义在方法内的内部类,有对应的作用范围 ,定一行开始到包含其代码块结束为止【同局部变量】
2、对象的创建和使用要放在局部内部类之后到当前方法结束之前
3、局部内部类使用外部局部变量时,需要为局部变量添加final,目的为了让局部变量生命周期超过对象
4、作用隐藏类内部实现
- 匿名内部类【常用】
特殊的局部内部类 | 没有名字的局部内部类
匿名内部类实现必须继承一个父类或者实现一个接口
语法:
new 接口|父类(){
功能实现
}.属性|方法() ;
匿名内部类将定义类、实现类、创建对象语法合并在一起
缺陷:代码可读性差
好处:保持编程思路通畅