抽象类
抽象类用 abstract class 声明,表示这个类还不完整,不能直接创建对象,只能作为子类的共同模板。
抽象方法
抽象方法只有声明,没有方法体:
abstract class Animal {
abstract void sound();
}子类继承抽象类后,必须实现全部抽象方法;否则子类也必须声明为抽象类。
抽象类可以有什么
- 成员变量
- 构造方法
- 普通方法
- 抽象方法
static成员
抽象类有构造方法,但不能直接 new。构造方法会在创建子类对象时被调用,用于初始化父类部分。
设计意义
抽象类适合表达一组对象的共同本质:
- 共同字段和通用方法写在父类。
- 不确定的行为写成抽象方法,交给子类实现。
abstract class Shape {
abstract double area();
void printArea() {
System.out.println(area());
}
}抽象类 vs 普通类
| 对比 | 普通类 | 抽象类 |
|---|---|---|
| 能否实例化 | 可以 | 不可以 |
| 是否能有抽象方法 | 不可以 | 可以 |
| 主要作用 | 创建具体对象 | 提供继承模板 |
抽象类 vs 接口
- 抽象类偏向“同一类事物”的模板,强调
is-a。 - 接口偏向“能力规范”,强调
can-do。 - Java 类只能继承一个抽象类,但可以实现多个接口。