IT培訓-高端面授IT培訓機構
          云和教育:云和數據集團高端IT職業教育品牌
          • 國家級
            全民數字素養與技能培訓基地
          • 河南省
            第一批產教融合型企業建設培育單位
          • 鄭州市
            數字技能人才(碼農)培養評價聯盟

          Java中繼承與聚合的區別是什么?

          • 發布時間:
            2023-05-25
          • 版權所有:
            云和教育
          • 分享:

          在Java中,繼承(inheritance)和聚合(aggregation)是兩種不同的對象關系。它們在代碼實現和語義上有所不同。

          繼承是一種對象之間的關系,其中一個類(子類)繼承另一個類(父類)的屬性和方法。子類可以重用父類的代碼,并可以添加新的屬性和方法。繼承是一種”is-a”(是一個)關系,其中子類是父類的一種特殊類型。在Java中,使用關鍵字extends來實現繼承。

          聚合是一種對象關系,其中一個類(整體)包含另一個類(部分)作為其成員變量。部分對象可以獨立存在,并且可以與多個整體對象相關聯。聚合是一種”has-a”(有一個)關系,其中整體對象包含部分對象。在Java中,可以通過將部分對象聲明為整體對象的成員變量來實現聚合關系。

           

          下面是一個簡單的代碼示例,演示了繼承和聚合的區別:

          // 父類
          class Vehicle {
              protected String brand;
          
              public Vehicle(String brand) {
                  this.brand = brand;
              }
          
              public void start() {
                  System.out.println("Starting the vehicle");
              }
          }
          
          // 子類繼承父類
          class Car extends Vehicle {
              private int numberOfSeats;
          
              public Car(String brand, int numberOfSeats) {
                  super(brand);
                  this.numberOfSeats = numberOfSeats;
              }
          
              public void drive() {
                  System.out.println("Driving the car");
              }
          }
          
          // 部分類
          class Engine {
              public void start() {
                  System.out.println("Starting the engine");
              }
          }
          
          // 整體類包含部分對象
          class Car2 {
              private String brand;
              private Engine engine;
          
              public Car2(String brand, Engine engine) {
                  this.brand = brand;
                  this.engine = engine;
              }
          
              public void start() {
                  engine.start();
                  System.out.println("Starting the car");
              }
          }
          
          public class Main {
              public static void main(String[] args) {
                  // 繼承示例
                  Car car = new Car("Toyota", 4);
                  car.start(); // 調用繼承自父類的方法
                  car.drive(); // 調用子類的方法
          
                  System.out.println();
          
                  // 聚合示例
                  Engine engine = new Engine();
                  Car2 car2 = new Car2("Toyota", engine);
                  car2.start(); // 調用整體對象的方法,并使用部分對象的方法
              }
          }

          在上述示例中,Car類通過繼承Vehicle類獲得了start方法,并添加了自己的drive方法。而Car2類使用聚合關系,將Engine對象作為成員變量,通過調用整體對象的start方法,間接調用了部分對象的start方法。