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關鍵字,子類將能夠繼承超類的所有屬性,除了超類的私有屬性。

我們可以用instance運算子來確保哺乳動物實際上是一種動物。

示例

線上演示

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日

691 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.