概述
什么是内部类
将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类。
内部类分类:
1. 成员内部类 -> 会用,会实例化对象即可
2. 静态内部类 -> 会用,会实例化对象即可
3. 匿名内部类 -> 必须熟练掌握
4. 局部内部类 -> 不讲, 定义在方法中
成员内部类
`成员内部类`:定义在`类中方法外`的类
访问特点
- 内部类可以直接访问外部类的成员,包括私有成员(普通成员变量和方法,静态成员变量和方法)
- 外部类要访问内部类成员,必须实例化内部类对象
- 成员内部类内不能有静态成员(变量和方法)。
创建内部类格式
外部类名.内部类名 name = new 外部类名.().new 外部类名.();
静态内部类
访问特点
- 静态内部类无法直接访问外部类的普通成员,只能访问外部类的静态成员,可以通过外部类实例来访问外部类的普通成员。
- 外部类不可以定义为静态类,Java中静态类只有一种,那就是静态内部类
- 外部类可以通过创建静态内部类实例的方法来调用静态内部类的非静态属性和方法,通过类名直接调用静态内部类中的静态属性和方法
创建静态内部类格式
外部类名.内部类名 name = new 外部类名.内部类名();
匿名内部类
开发中,最常用到的内部类就是匿名内部类了。以接口举例,当你使用一个接口时,得做如下几步操作:
- 定义子类
- 重写接口中的方法
- 创建子类对象
- 调用重写后的方法
我们的目的,最终只是为了调用方法,那么能不能简化一下,把以上四步合成一步?匿名内部类就是做这样的快捷方式。
前提
匿名内部类必须`继承一个父类`或者`实现一个父接口`。
格式
new ⽗类名或者接⼝名() {
// ⽅法重写
@Override
public void method() {
// 执⾏语句
}
};