首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 抽象類與抽象方法:強制契約與禁止實例化的編譯期保障

     編輯:Java 相關知識

從「偽方法」到抽象方法

早期基類提供空方法體(偽方法),調用不報錯但無意義。抽象方法解決此問題:

  • 只有聲明,無方法體:abstract void play();
  • 含抽象方法的類必須聲明 abstract class。
  • 抽象類不能實例化,編譯器強制阻止 new Instrument4()。

衍生類義務

  • 實現所有抽象方法 → 成為具體類,可實例化。
  • 不全實現 → 仍為抽象類,需繼續聲明 abstract。

無抽象方法的抽象類

純粹為「禁止實例化」而聲明 abstract class,合法且有用。

Instrument4 重構示例

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()

抽象類 vs 接口(Java 8 前)

特性抽象類接口
方法實現可有具體方法全抽象
字段任意只能 static final
繼承單繼承多實現
構造器有(供子類調用)無

選擇建議

需共享代碼/字段 → 抽象類。純契約/多重組合 → 接口。Java 8 default 方法模糊了邊界,但核心哲學不變。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved