子类继承抽象类时必须实现所有未实现的抽象方法,否则编译报错;方法签名须完全一致,访问权限不能更严格;可用@override注解辅助检查;若不实现则子类也须声明为abstract。

子类继承抽象类时,必须实现父类中所有未被实现的抽象方法,否则编译会报错。这是 Java 的强制约束,目的是确保每个具体子类都提供完整的行为定义。
必须重写全部抽象方法
只要子类不是抽象类,它就必须为抽象父类中的每一个 abstract 方法提供具体实现。方法签名(返回类型、方法名、参数列表)必须完全一致,访问权限不能比父类更严格(例如父类是 public abstract,子类实现也必须是 public)。
- 漏写任意一个抽象方法 → 编译失败
- 方法名或参数稍有不同 → 不算重写,仍被当作未实现
- 返回类型不匹配(如父类返回 void,子类写成 int)→ 编译错误
用 @Override 显式标注更安全
在重写的方法上加上 @Override 注解,能让编译器帮你检查是否真正覆盖了父类抽象方法。如果签名写错,IDE 或编译器会立刻提示错误,避免因拼写或参数疏忽导致遗漏。
示例:
abstract class Animal {public abstract void speak();
public abstract void move();
}
class Dog extends Animal {
@Override
public void speak() {
System.out.println("汪汪!");
}
@Override
public void move() {
System.out.println("奔跑");
}
}
不想实现?那就声明自己也是抽象类
如果子类暂时无法或不愿提供全部抽象方法的具体逻辑,可以将该子类也声明为 abstract。这样它就不必实现父类的抽象方法,但代价是它也不能被实例化。
- 抽象子类可选择性地实现部分抽象方法
- 留给更下层的具体子类去完成剩余实现
- 适合构建多级抽象模板(比如:Animal → Mammal → Dog)
构造方法和抽象方法无关,但初始化要配合
抽象类可以有构造方法,子类构造时需通过 super() 调用它来完成父类状态初始化。这和抽象方法的实现是两件事——即使你正确实现了所有抽象方法,若没处理好构造链(比如父类只有带参构造而子类没显式调用),也会编译失败。
- 子类构造方法第一行默认是 super()
- 若父类无无参构造,子类必须显式写 super(…)
- 抽象方法的实现写在普通方法体里,不参与构造流程
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











