一、先弄懂:三者的"身份定位"
1.普通类:最基础的功能载体
普通类是 JAVA 中的最常规的类,具备的特性:
- 定义成员变量 (包括实例变量和类变量)和成员方法(包括普通方法、静态方法、构造方法);
- 方法既可以有方法体实现具体逻辑,也能根据需求重载 、重写;
- 支持实例化,可以通过关键字 new 来创建对象
2.抽象类:"半抽象"的模版
用 abstract 关键字修饰的类,兼具"模版性"和"约束性"
- 可以包含普通类的所有成员(变量、普通方法、构造方法);
- 允许定义抽象方法(用
abstract修饰,只有方法签名,没有方法体),约束子类必须实现的核心逻辑; - 无法直接实例化,必须子类继承并实现所有的抽象方法后,才能够创建子类对象
3. 接口:"纯抽象" 的行为规范
接口是用interface关键字定义的特殊类型,它本质是一套 "行为契约",只规定 "做什么",不关心 "怎么做":
JDK 8 之前:只能定义常量(默认public static final)和抽象方法(默认public abstract);
JDK 8 及之后:支持定义默认方法(default修饰,带方法体,子类可直接使用或重写)和静态方法(static修饰,只能通过接口名调用);
无法实例化,必须由类通过implements关键字实现接口中的所有抽象方法(默认方法可选择重写);
一个类可以实现多个接口,以此实现 Java 的 "多继承" 效果。