位置:首頁 > Java技術 > Java基礎教程 > Java繼承

Java繼承

繼承可以被定義為其中一個對象獲取的另一個特征的過程。使用繼承的信息是在一個等級秩序作出管理。

當我們談到繼承,最常用的關鍵字是extends和implements。這些話會確定一個對象是否IS-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關鍵字的子類就可以,除了超類的私有屬性外,它繼承超類的所有屬性。

我們可以保證,哺乳動物實際上是與使用實例操作符的動物。

例子:

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

既然extends關鍵字讓我們研究如何使用implements關鍵字來獲得對IS-A關係有很好的理解。

implements關鍵字被使用的類從接口繼承。接口永遠不能憑借它的類進行擴展。

例子:

public interface Animal {}

public class Mammal implements Animal{
}

public class Dog extends Mammal{
}

instanceof 關鍵字:

用instanceof操作符檢查確定哺乳動物是否實際上是一個動物,而狗實際上是一種動物

interface Animal{}

class Mammal implements Animal{}

public class Dog extends Mammal{
   public static void main(String args[]){

      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 Speed類。通過讓飛車一個單獨的類,我們不必把屬於加速Van 類中的全部代碼。這使得它可以重複使用Speed類在多個應用程序。

在麵向對象的功能,用戶無需理會哪個對象是做實際工作。要做到這一點,Van類隱藏用戶的執行細節。所以基本上會發生什麼是用戶會問Van類來執行某些動作,Van類要麼本身做的工作或要求另一個類執行的操作。

要記住的一個非常重要的事實是,Java隻支持單一繼承。這意味著,一個類不能擴展多個類。因此,以下是非法的:

public class extends Animal, Mammal{} 

因此,一個類可以實現一個或多個接口。這使得Java要擺脫多重繼承是不可能的。