内部类
(1)把类定义在另一个类的内部,该类就被称为内部类。
举例:把类B定义在类A中,类B就被称为内部类。 A称为外围类。inner class outer class
静态内部类: enclosing class nest class
(2)内部类的访问规则
A:内部类可以直接访问外部类的成员,包括私有(内部类秘密捕获了一个外部类对象)
B:外部类要想访问内部类成员,必须创建对象
(3)内部类的分类
A:成员内部: 成员内部类,静态内部类
B:局部内部: 局部内部类,匿名内部类
(4)成员内部类
A:private 为了数据的安全性
B:static 为了访问的方便性(静态内部类,只能访问外部类的静态成员)
成员内部类不是静态的:
格式:外部类.内部类 对象名 = new 外部类().new 内部类(); // 将外部类对象传给 外部类.this 引用
内部类对象是依赖于外部类对象存在。(内部类对象是外部类的对象所有)
成员内部类是静态的:
格式:
外部类.内部类 对象名 = new 外部类.内部类();
(5)局部内部类
A:局部内部类访问局部变量必须是最终量或者是实际的最终量。
B:为什么呢?
因为局部变量使用完毕就消失,而堆内存的数据并不会立即消失。
所以,堆内存还是用该变量,而该变量已经没有了。
为了让该值还存在,就加final修饰。 --> 常量池
(6)匿名内部类
A:是内部类的简化形式
B:前提
必须要有类和接口存在
C:格式:
new 类名或者接口名() {
重写方法;
};
D:本质:
创建了一个对象。
该对象是该类的子类或者是接口的实现类的对象。