Java 中的 IS a 與 HAS a
Rupam Yadav
2023年10月12日
使用物件導向的程式語言的關鍵特性之一是我們可以多次重用程式碼。通常,我們可以使用繼承和組合兩個概念來實現可重用性。
繼承是一種 IS-A 關係,而組合是一種 HAS-A 關係。這兩個概念在某些方面有所不同,但具有相同的目標,即可重用性。
下面讓我們看看這兩個概念之間的區別。
Java 中的 IS-A 關係
Java 中的繼承或 IS-A 關係是指兩個或多個類的關係。可以通過使用 Java 中的 extends
關鍵字來實現繼承。我們可以繼承父類在子類中使用它的方法和變數。
在下面的示例程式碼中,我們有兩個類,Animal
和 Dog
,Animal
類具有返回 String 的函式 whatAmI()
,而 Dog
類 extends
類 Animal
這是繼承的概念。
這種狗
是一種動物
關係。Dog
類現在可以從其父類訪問 whatAmI()
方法。
class Animal {
public String whatAmI() {
return "I belong to Animal class";
}
}
class Dog extends Animal {
public void aboutMe() {
System.out.println("I am a Dog class and " + whatAmI());
}
}
輸出:
I am a Dog class and I belong to Animal class
Java 中的 HAS-A 關係
與繼承不同,組合或 HAS-A 關係不使用任何關鍵字,如 extends
。我們建立了一個父類的物件或我們想在這個方法中使用的任何類。
在下面的例子中,我們有兩個類,Legs
和 Dog
。
Legs
有一個方法 howManyLegs()
。在 Dog
類中,我們建立了一個 Legs
類的物件,並使用該物件來呼叫 howManyLegs()
函式。
現在,在這裡我們可以看到正在應用 Composition 概念,Dog
HAS-A Legs
或 Dog
類 HAS-A Legs
屬性。
class Legs {
public String howManyLegs() {
return "I have four legs";
}
}
class Dog {
Legs legs = new Legs();
public void aboutMe() {
System.out.println("I am a Dog class and " + legs.howManyLegs());
}
}
輸出:
I am a Dog class and I have four legs
IS-A 關係和 HAS-A 關係之間的主要區別
IS-A | 有一個 |
---|---|
這是繼承的概念 | 這是一個組成的概念 |
一個類不能擴充套件多個類。 | 一個類可以與多個其他類具有 HAS-A 關係 |
不能在繼承中擴充套件最終類 | 我們可以在 Composition 中重用 final 類 |
繼承是靜態繫結,不能在執行時更改 | 組合是動態繫結,可靈活更改 |
作者: Rupam Yadav
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn