早期基類提供空方法體(偽方法),調用不報錯但無意義。抽象方法解決此問題:
abstract void play();abstract class。new Instrument4()。abstract。純粹為「禁止實例化」而聲明 abstract class,合法且有用。
abstract class Instrument4 {
int i; // 字段可保留
public abstract void play();
public String what() { return "Instrument4"; } // 可有具體方法
public abstract void adjust();
}
class Wind4 extends Instrument4 { public void play() {...} public void adjust() {} }
class Brass4 extends Wind4 { public void adjust() { println("Brass4.adjust()"); } }
// Brass4 繼承 Wind4 的 play(),只覆寫 adjust()
| 特性 | 抽象類 | 接口 |
|---|---|---|
| 方法實現 | 可有具體方法 | 全抽象 |
| 字段 | 任意 | 只能 static final |
| 繼承 | 單繼承 | 多實現 |
| 構造器 | 有(供子類調用) | 無 |
需共享代碼/字段 → 抽象類。純契約/多重組合 → 接口。Java 8 default 方法模糊了邊界,但核心哲學不變。