abstract关键字用于声明抽象类或抽象方法,抽象类用abstract修饰且不可实例化;强制子类实现的是抽象方法而非抽象类本身,子类若为具体类则必须重写全部抽象方法。

abstract 关键字本身不能用来“声明抽象类强制子类继承实现”——它用于声明抽象类或抽象方法,而“强制子类实现”的机制是通过 抽象方法 实现的,不是靠抽象类本身。
抽象类必须用 abstract 修饰
定义一个类为抽象类,需在 class 前加 abstract。抽象类不能被实例化(不能 new),只能被继承:
abstract class Animal {
// 可以有具体方法
public void breathe() {
System.out.println("呼吸中...");
}
// 也可以有抽象方法(无方法体)
public abstract void makeSound();
}
抽象方法迫使子类重写
只要类中包含至少一个 abstract 方法,该类就必须声明为 abstract;反过来,abstract 类可以没有抽象方法(但这样设计通常无意义)。真正“强制子类实现”的,是其中的抽象方法:
- 子类继承 abstract 类,若不实现全部抽象方法,子类也必须声明为 abstract
- 只有当子类是具体类(非 abstract)时,才必须覆盖所有继承来的抽象方法
子类实现抽象方法的正确写法
子类用 @Override 显式重写抽象方法,并提供具体逻辑:
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("汪汪!");
}
}
// 可以正常实例化
Dog dog = new Dog(); // ✅
dog.makeSound(); // 输出:汪汪!
常见误区提醒
- abstract 类 ≠ 接口:它可含构造器、成员变量、具体方法,支持单继承
- abstract 方法不能是 private、static 或 final(它们与“被子类实现”冲突)
- 抽象类的抽象方法默认是 public(即使不写),子类重写时访问权限不能更严格










