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 類將自行執行該操作或要求另一個類執行該操作。
廣告