Java 中的 IS a 與 HAS a

Rupam Yadav 2023年10月12日
  1. Java 中的 IS-A 關係
  2. Java 中的 HAS-A 關係
  3. IS-A 關係和 HAS-A 關係之間的主要區別
Java 中的 IS a 與 HAS a

使用物件導向的程式語言的關鍵特性之一是我們可以多次重用程式碼。通常,我們可以使用繼承和組合兩個概念來實現可重用性。

繼承是一種 IS-A 關係,而組合是一種 HAS-A 關係。這兩個概念在某些方面有所不同,但具有相同的目標,即可重用性。

下面讓我們看看這兩個概念之間的區別。

Java 中的 IS-A 關係

Java 中的繼承或 IS-A 關係是指兩個或多個類的關係。可以通過使用 Java 中的 extends 關鍵字來實現繼承。我們可以繼承父類在子類中使用它的方法和變數。

在下面的示例程式碼中,我們有兩個類,AnimalDogAnimal 類具有返回 String 的函式 whatAmI(),而 DogextendsAnimal 這是繼承的概念。

這種是一種動物關係。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。我們建立了一個父類的物件或我們想在這個方法中使用的任何類。

在下面的例子中,我們有兩個類,LegsDog

Legs 有一個方法 howManyLegs()。在 Dog 類中,我們建立了一個 Legs 類的物件,並使用該物件來呼叫 howManyLegs() 函式。

現在,在這裡我們可以看到正在應用 Composition 概念,Dog HAS-A LegsDog 類 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 Yadav avatar Rupam Yadav avatar

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