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

Java 抽象類別與介面:定義契約、強制實作的利器

     編輯:Java 相關知識

抽象類別:只供繼承,不供實例化

當基底類別僅為衍生類別提供共同介面,不希望被直接實例化時,使用 abstract 關鍵字:

abstract class Shape {
    abstract void draw(); // 抽象方法:無主體,強制子類實作
    void commonMethod() { ... } // 可有具體實作
}
  • 嘗試 new Shape() 會編譯錯誤;
  • 抽象方法只能存在於抽象類別中;
  • 子類別必須實作所有抽象方法,否則也必須宣告為抽象類別。

介面:純粹的契約定義

interface 將抽象概念推進一步:

  • 完全禁止方法主體(Java 8 前),只定義方法簽名;
  • 欄位隱含 public static final(常數);
  • 一個類別可實作多個介面,但只能繼承單一類別(單繼承、多實作)。
interface Drawable {
    void draw(); // 隱含 public abstract
}
class Circle implements Drawable { ... }

介面 vs 抽象類別:如何選擇?

特性抽象類別介面
方法實作可有具體方法Java 8 前不可有(default/static 除外)
欄位任意只能是常數
建構子可有不可有
繼承關係單繼承多實作
適用場景「是一種」關係,共享程式碼「能做什麼」契約,跨類別層級

設計原則:介面導向程式設計

「對介面程式設計,而非實作」—— 透過介面解耦模組,支援多型替換、單元測試模擬、外掛擴充等進階架構模式。

總結

抽象類別與介面是 Java 型別系統的基石:前者提供「部份實作 + 強制契約」,後者定義「純粹契約」。善用兩者,能建構出高內聚、低耦合、易擴充的物件導向系統。

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