Java 中的繼承(is-a)與組合(has-a)關係


IS-A 關係

IS-A 是一種表達方式,表示“這個物件是那個物件的一種型別”。讓我們看看如何使用 extends 關鍵字來實現繼承。

public class Animal {
}
public class Mammal extends Animal {
}
public class Reptile extends Animal {
}
public class Dog extends Mammal {
}

現在,如果我們考慮 IS-A 關係,我們可以說:

  • 哺乳動物 IS-A 動物
  • 爬行動物 IS-A 動物
  • 狗 IS-A 哺乳動物
  • 因此:狗 IS-A 動物

透過使用 extends 關鍵字,子類將能夠繼承超類的所有屬性,除了超類的私有屬性。

我們可以透過使用 instanceof 運算子來確保哺乳動物實際上是動物。

示例

線上演示

class Animal {
} class Mammal extends Animal {
} class Reptile extends Animal {
} public class Dog extends Mammal {
   public static void main(String args[]) {
      Animal a = new Animal();
      Mammal m = new Mammal();
      Dog d = new Dog();
      System.out.println(m instanceof Animal);
      System.out.println(d instanceof Mammal);
      System.out.println(d instanceof Animal);
    }
}

這將產生以下結果:

輸出

true
true
true

HAS-A 關係

這些關係主要基於用法。這決定了某個類是否 HAS-A 某些東西。這種關係有助於減少程式碼重複和錯誤。

讓我們來看一個例子:

示例

public class Vehicle{ }
public class Speed{ }
public class Van extends Vehicle {
   private Speed sp;  
}

這表明 Van 類 HAS-A 速度。透過為速度建立一個單獨的類,我們不必將屬於速度的整個程式碼放入 Van 類中,這使得可以在多個應用程式中重用 Speed 類。

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

更新於: 2020年6月17日

690 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告