繼承能夠被定義爲其中一個對象獲取的另外一個特徵的過程。使用繼承的信息是在一個等級秩序做出管理。ide
當咱們談到繼承,最經常使用的關鍵字是extends和implements。這些話會肯定一個對象是否IS-A類型的另外一個。經過使用這些關鍵字,咱們可使一個對象得到另外一個對象的屬性。google
IS-A(是一個)是一種表達:這個對象是一個類型的對象。讓咱們來看看如何使用extends關鍵字來實現繼承。spa
public class Animal{}public class Mammal extends Animal{}public class Reptile extends Animal{}public class Dog extends Mammal{}
如今,根據上面的例子中,在面向對象的術語中,知足下列條件:orm
動物是哺乳動物類的超類。對象
動物是爬蟲類的超類。繼承
哺乳動物和爬行動物是動物類的子類。接口
狗是哺乳動物雙方和動物類的子類。it
如今,若是咱們考慮了IS-A關係,咱們能夠說:class
哺乳動物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); }}
這將產生如下結果:
truetruetrue
既然extends關鍵字讓咱們研究如何使用implements關鍵字來得到對IS-A關係有很好的理解。
implements關鍵字被使用的類從接口繼承。接口永遠不能憑藉它的類進行擴展。
public interface Animal {}public class Mammal implements Animal{}public class Dog extends Mammal{}
用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); }}
這將產生如下結果:
truetruetrue
這些關係主要是基於使用。這就決定了某一類是否 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要擺脫多重繼承是不可能的。