Java中继承抽象类必须用extends关键字声明具体子类并实现全部抽象方法,否则子类需声明为abstract;抽象方法不可为private、static或final,重写时方法签名须一致且访问修饰符不能更严格。

在 Java 中,继承抽象类并实现其抽象方法,需要使用 extends 关键字继承该抽象类,并用 class 声明一个具体子类,然后重写所有未实现的抽象方法(即提供方法体)。这是编译通过的必要条件。
必须实现全部抽象方法
抽象类中定义的抽象方法没有方法体(只有声明,以分号结尾),子类继承后若不全部实现,该子类也必须声明为 abstract;否则编译报错。
- 抽象方法不能是 private、static 或 final(因为无法被重写)
- 实现时方法签名(名称、参数列表、返回类型)必须完全一致(协变返回类型除外)
- 访问修饰符不能比父类更严格(例如父类是 protected,子类可改为 public,但不能是 private)
示例:继承并实现抽象类
假设有如下抽象类:
abstract class Animal {
protected String name;
public Animal(String name) {
this.name = name;
}
// 抽象方法
public abstract void makeSound();
public abstract void move();
// 普通方法(可直接继承使用)
public void sleep() {
System.out.println(name + " is sleeping.");
}
}
子类实现方式:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
立即学习“Java免费学习笔记(深入)”;
class Dog extends Animal {
public Dog(String name) {
super(name);
}
// ✅ 正确实现两个抽象方法
@Override
public void makeSound() {
System.out.println(name + " barks: Woof!");
}
@Override
public void move() {
System.out.println(name + " runs fast.");
}
}
此时 Dog 是具体类,可以创建实例:new Dog("Buddy")。
注意构造器与初始化顺序
抽象类的构造器不会被继承,但子类构造器中必须显式或隐式调用父类构造器(super(...))。
- 抽象类的构造器用于初始化其成员变量(如
name),对子类有意义 - 即使抽象类无显式构造器,也会有默认无参构造器;若有带参构造器,子类需匹配调用
常见错误提醒
- 忘记
@Override注解:虽非强制,但强烈建议添加,避免拼写错误导致“重载而非重写” - 方法签名不一致(如返回类型不同、参数名不同但类型相同——这不算错误;但参数类型或数量不同就是重载,不是实现)
- 把抽象类误当成接口:抽象类可含普通方法、构造器、字段,而接口不能有构造器和实例字段(Java 8+ 接口可有 default/static 方法,但本质不同)

















