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

Java 接口 vs 抽象類:核心差異與選型決策指南

     編輯:Java 相關知識

核心定位不同

維度接口抽象類
本質行為契約實體模板
關鍵詞能做什麼是什麼
繼承關係實現,可多實現繼承,僅單繼承
方法實現JDK 8 前全抽象,JDK 8+ 可 default/static可含具體/抽象方法
構造器無有(供子類調用)
字段隱式 public static final任意修飾符

經典類比

  • 抽象類:「人」—— 男人、女人都是人,共享屬性(姓名、年齡)與行為(吃飯)。
  • 接口:「可飛行」—— 鳥、飛機、超人均可實現,無關實體本源。

語法層面關鍵差異


// 接口
public interface Flyable {
    void fly();                    // 隱式 public abstract
    default void land() { ... }    // JDK 8 默認方法
    static void checkLicense() {}  // JDK 8 靜態方法
}

// 抽象類
public abstract class Human {
    private String name;           // 實例字段
    public Human(String name) { this.name = name; } // 構造器
    public abstract void think();  // 抽象方法
    public void eat() { ... }      // 具體方法
}

選型決策樹

  1. 是否需要構造器/實例狀態? → 是 → 抽象類
  2. 是否需要多重繼承行為? → 是 → 接口
  3. 是否要定義「是一種」核心關係? → 是 → 抽象類
  4. 是否要定義「能夠」橫切能力? → 是 → 接口
  5. API 公開給第三方擴展? → 接口(保持二進制兼容,default method 可演進)

實戰組合模式:模板方法 + 策略接口

// 抽象類定義骨架
public abstract class AbstractExporter {
    public final void export(Data data) {
        validate(data);
        doExport(data);
        notifyDone();
    }
    protected abstract void doExport(Data data); // 子類實現
    private void validate(Data data) { ... }
    private void notifyDone() { ... }
}

// 接口定義可插拔策略
public interface CompressStrategy {
    byte[] compress(byte[] data);
}
public class ZipStrategy implements CompressStrategy { ... }
public class GzipStrategy implements CompressStrategy { ... }

// 組合使用
public class CsvExporter extends AbstractExporter {
    private CompressStrategy compressor;
    public CsvExporter(CompressStrategy compressor) { this.compressor = compressor; }
    @Override protected void doExport(Data data) {
        byte[] raw = toCsv(data);
        byte[] compressed = compressor.compress(raw);
        writeToFile(compressed);
    }
}

總結

抽象類建模「是什麼」,接口建模「能做什麼」。優先用接口定義契約,配合抽象類複用代碼,接口隔離變化點,構建高內聚低耦合系統。

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