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

Java 類與類關係詳解:依賴、聚合、繼承三大核心關係圖解

     編輯:Java 相關知識

三大關係對比

關係符號語義代碼表現耦合度
依賴···>Use-a:臨時使用方法參數、局部變量、static 方法調用最弱
聚合◇—Has-a:整體-部分,部分可獨立存在成員變量引用,構造器/Setter 注入中等
組合◆—Contains-a:整體-部分,部分不可獨立(生命週期綁定)成員變量,構造器內 new,無外部引用強
繼承△—Is-a:泛化-特化extends / implements最強

在線書店訂單系統建模範例

類識別

  • Book:ISBN、書名、價格、作者
  • Account:用戶ID、用戶名、密碼、餘額
  • Order:訂單號、下單時間、狀態、總價
  • Address:收貨人、電話、省市區、詳細地址

關係映射

// 依賴:Order 臨時依賴 Account 校驗餘額
public class Order {
    public boolean checkout(Account account) { // 參數依賴
        return account.getBalance() >= this.totalPrice;
    }
}

// 聚合:Order 擁有 Book(書籍可被多訂單引用,獨立存在)
public class Order {
    private List<Book> items = new ArrayList<>(); // 聚合
    public void addItem(Book book) { items.add(book); }
}

// 組合:Order 擁有 Address(地址隨訂單生死,不共享)
public class Order {
    private Address shippingAddress; // 組合
    public Order(Address addr) { this.shippingAddress = addr; }
}

// 繼承:VipAccount 是 Account 的特化
public class VipAccount extends Account {
    private int level; private double discount;
    @Override public boolean checkout(Order o) { /* VIP 邏輯 */ }
}

設計原則

  • 優先組合/聚合,少用繼承:繼承破壞封裝,父類變更波及所有子類
  • 依賴倒置:高層模組依賴抽象(介面),不依賴具體實現
  • 接口隔離:依賴盡可能細粒度介面,減少無關方法強制實現
  • 區分聚合與組合:生命週期是否綁定是關鍵判斷標準
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved