在 Java 物件導向設計中,抽象類是實現多態與代碼復用的關鍵機制。它介於接口與具體類之間,既能定義抽象方法強制子類實現,又能提供具體方法供子類直接繼承或覆寫。理解抽象類的規則對於掌握 Java 繼承體系至關重要。
使用 abstract 關鍵字修飾的類即為抽象類。一個重要特性是:抽象類可以不包含任何抽象方法,但只要類中存在抽象方法,該類就必須聲明為抽象類。
// 合法:抽象類包含具體方法
abstract class Animal {
public void breathe() {
System.out.println("呼吸中...");
}
}
// 非法:包含抽象方法但未聲明為抽象類
class Bird {
abstract public void fly(); // 編譯錯誤
}
當具體類繼承抽象類時,必須實現父類所有的抽象方法;否則子類也必須聲明為抽象類。這體現了「契約式設計」的思想——父類定義規範,子類履行義務。
abstract class Shape {
abstract double area(); // 抽象方法
public void display() { // 具體方法
System.out.println("面積: " + area());
}
}
class Circle extends Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
@Override
double area() {
return Math.PI * radius * radius;
}
}
掌握這些核心規則,能讓你在設計類層次結構時更加得心應手,編寫出更具擴展性與維護性的 Java 代碼。