Java 教程

Java 控制語句

面向物件程式設計

Java 內建類

Java 檔案處理

Java 錯誤和異常

Java 多執行緒

Java 同步

Java 網路程式設計

Java 集合

Java 介面

Java 資料結構

Java 集合演算法

高階 Java

Java 雜項

Java API 和框架

Java 類引用

Java 有用資源

Java - 聚合



Java 聚合

聚合是兩個之間的關係,其中一個類包含另一個類的例項。例如,當物件 A 包含對另一個物件 B 的引用,或者我們可以說物件 A 與物件 B 之間存在 HAS-A 關係時,這在 Java 程式設計中被稱為聚合。

Java 聚合的用途

Java 中的聚合有助於程式碼重用。物件 B 可以具有實用程式方法,這些方法可以被多個物件利用。任何擁有物件 B 的類都可以利用其方法。

Java 聚合示例

示例 1

在這個例子中,我們建立了一些類,例如 Vehicle、Speed。定義了一個 Van 類,它擴充套件了 Vehicle 類並具有 Speed 類物件。Van 類繼承了 Vehicle 類的屬性,Speed 是它的屬性,我們從呼叫者物件傳遞它。在輸出中,我們列印 Van 物件的詳細資訊。

package com.tutorialspoint;

class Vehicle{
   private String vin;

   public String getVin() {
      return vin;
   }

   public void setVin(String vin) {
      this.vin = vin;
   }	
}
class Speed{
   private double max;

   public double getMax() {
      return max;
   }

   public void setMax(double max) {
      this.max = max;
   }
}

class Van extends Vehicle {
   private Speed speed;

   public Speed getSpeed() {
      return speed;
   }

   public void setSpeed(Speed speed) {
      this.speed = speed;
   }

   public void print() {
      System.out.println("Vin: " +this.getVin() + ", Max Speed: " + speed.getMax() );
   }
} 

public class Tester {

   public static void main(String[] args) {
      Speed speed = new Speed();
      speed.setMax(120);
      Van van = new Van();

      van.setVin("abcd1233");
      van.setSpeed(speed);
      van.print();
   }
}

輸出

Vin: abcd1233, Max Speed: 120.0

示例 2

在這個例子中,我們建立了一些類,例如 Student、Address。一個學生可以有一個地址。因此,我們在 Student 類中定義了一個地址作為例項變數。在輸出中,我們列印學生的詳細資訊。

package com.tutorialspoint;

class Address {
   int strNum;
   String city;
   String state;
   String country;

   Address(int street, String c, String st, String country) {
      this.strNum = street;
      this.city = c;
      this.state = st;
      this.country = country;
   }
}
class Student {
   int rno;
   String stName;

   Address stAddr;
   Student(int roll, String name, Address address){
      this.rno = roll;
      this.stName = name;
      this.stAddr = address;
   }
}

public class Tester {

   public static void main(String[] args) {
      Address ad= new Address(10, "Bareilly", "UP", "India");
      Student st= new Student(1, "Aashi", ad);
      System.out.println("Roll no: "+ st.rno);
      System.out.println("Name: "+ st.stName);
      System.out.println("Street: "+ st.stAddr.strNum);
      System.out.println("City: "+ st.stAddr.city);
      System.out.println("State: "+ st.stAddr.state);
      System.out.println("Country: "+ st.stAddr.country);
   }
}

輸出

Roll no: 1
Name: Aashi
Street: 10
City: Bareilly
State: UP
Country: India

從獨特的角度來看,這是一種關聯型別。聚合是一種單向定向關係,它精確地表達了類之間的 HAS-A 關係。此外,當聚合兩個類時,終止其中一個類不會影響另一個類。與組合相比,它通常被指定為弱關係。相比之下,父物件擁有子實體,這意味著子實體無法直接訪問,並且如果沒有父物件就無法存在。相反,在關聯中,父實體和子實體都可以獨立存在。

HAS-A 關係

這些關係主要基於用法。這決定了某個類是否擁有某事物。這種關係有助於減少程式碼重複以及錯誤。

示例

public class Vehicle{}
public class Speed{}

public class Van extends Vehicle {
   private Speed sp;
} 

這表明 Van 類擁有 Speed。透過為 Speed 建立一個單獨的類,我們不必將屬於 Speed 的所有程式碼都放在 Van 類中,這使得可以在多個應用程式中重用 Speed 類。

在面向物件特性中,使用者不需要關心哪個物件正在執行實際工作。為了實現這一點,Van 類向 Van 類的使用者隱藏了實現細節。因此,基本上發生的情況是,使用者會要求 Van 類執行某個操作,而 Van 類會自己執行該操作,或者要求另一個類執行該操作。

廣告