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

深度解析 Java 介面與繼承的本質:從工廠模式看抽象的力量

     編輯:Java 相關知識

前言:為什麼要有介面?

許多開發者誤以為介面只是「替代多重繼承」的妥協產物。實則不然——介面的核心價值在於「型別抽象」,而非程式碼重用。繼承的本質同樣是抽象(提供模板),而非單純為了重用父類方法。本文透過資料庫連線的工廠模式實例,層層剖析介面、繼承、委派的真諦。

錯誤示範:為了重用而繼承

class A { void run() { ... } }
class B extends A { } // 只是想用 run()

正確做法:委派/組合

class B {
    private A a = new A();
    void doRun() { a.run(); }
}

這正是 GoF 設計模式一貫倡導的「組合優於繼承」原則。

介面的真正用途:定義「型別契約」

情境:應用需支援 MySQL、Oracle、SQL Server、DB2 多種資料庫,但業務邏輯不想耦合具體實作。

步驟 1:定義介面(型別契約)

package org.bromon.test;
public interface DB {
    Connection openDB(String url, String user, String pwd);
    void close();
}

步驟 2:各資料庫實作介面

public class Mysql implements DB { /* 實作細節 */ }
public class Oracle implements DB { /* 實作細節 */ }

步驟 3:引入工廠封裝實例化邏輯

public class DBFactory {
    public static DB getConn() {
        return new Mysql(); // 或依設定檔動態決定
    }
}

步驟 4:客戶端面向介面程式設計

DB db = DBFactory.getConn(); // 僅依賴 DB 介面
Connection conn = db.openDB(...);

此即「開閉原則」與「依賴倒置」的具體落地:高層模組不依賴低層模組,雙方依賴抽象。

繼承的正確使用時機:抽象類

  • 抽象類不可實例化,僅提供「模板」與「共享骨架」。
  • 只有在「is-a」關係明確、且需要強制子類實作特定行為時,才使用繼承。
  • Java 取消多重繼承,正是為了遏制「為了重用而濫用繼承」的惡習。

總結

  1. 介面 = 型別抽象,管理類別分類,實現多型與解耦。
  2. 繼承 = 實作繼承 + 型別繼承,核心目的仍是抽象,非重用。
  3. 程式碼重用請用組合/委派,而非繼承。
  4. 工廠模式將具體類別的實例化責任集中,讓業務邏輯純粹面向介面。

理解這兩點,你的 Java 設計將從「能跑」進化為「好維護、易擴展」。

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