三大特性之繼承

三大特性之繼承

   繼承 :顧名思義,繼任,承接,傳承的意思。Java中的繼承使用的是extends關鍵字,繼承的類叫做子類(派生類或者超類),被繼承的類叫做父類(或者基類)。凡是這種可以有包含關係的類都能實現繼承關係。 
   
   如果兩個類存在繼承關係,則子類會自動繼承父類的方法和變量,在子類中可以調用父類的方法和變量。在java中,只允許單繼承,也就是說 一個類最多隻能顯示地繼承於一個父類。但是一個類卻可以被多個類繼承,也就是說一個類可以擁有多個子類。

1.子類繼承父類的成員變量
  當子類繼承了某個類之後,便可以使用父類中的成員變量,但是並不是完全繼承父類的所有成員變量。具體的原則如下:
  1)能夠繼承父類的public和protected成員變量;不能夠繼承父類的private成員變量;
  2)對於父類的包訪問權限成員變量,如果子類和父類在同一個包下,則子類能夠繼承;否則,子類不能夠繼承;
  3)對於子類可以繼承的父類成員變量,如果在子類中出現了同名稱的成員變量,則會發生隱藏現象,即子類的成員變量會屏蔽掉父類的同名成員變量。如果要在子類中訪問父類中同名成員變量,需要使用super關鍵字來進行引用。
2.子類繼承父類的方法
  同樣地,子類也並不是完全繼承父類的所有方法。
  1)能夠繼承父類的public和protected成員方法;不能夠繼承父類的private成員方法;
  2)對於父類的包訪問權限成員方法,如果子類和父類在同一個包下,則子類能夠繼承;否則,子類不能夠繼承;
  3)對於子類可以繼承的父類成員方法,如果在子類中出現了同名稱的成員方法,則稱爲覆蓋,即子類的成員方法會覆蓋掉父類的同名成員方法。如果要在子類中訪問父類中同名成員方法,需要使用super關鍵字來進行引用。
  注意:隱藏和覆蓋是不同的。隱藏是針對成員變量和靜態方法的,而覆蓋是針對普通方法的。(後面會講到)
3.構造器(構造器就是我們在new 這個類時 可以構造的類(就是有參 無參,有無返回值的區別))
子類是不能夠繼承父類的構造器,但是要注意的是,如果父類的構造器都是帶有參數的,則必須在子類的構造器中顯示地通過super關鍵字調用父類的構造器並配以適當的參數列表。如果父類有無參構造器,則在子類的構造器中用super關鍵字調用父類構造器不是必須的,如果沒有使用super關鍵字,系統會自動調用父類的無參構造器。
 4.super
  super主要有兩種用法:
  1)super.成員變量/super.成員方法;
  2)super(param1,param2…)
  第一種用法主要用來在子類中調用父類的同名成員變量或者方法;第二種主要用在子類的構造器中顯示地調用父類的構造器,要注意的是,如果是用在子類構造器中,則必須是子類構造器的第一個語句。
說到繼承,不得不提的就是重載和重寫。

重寫規則

  • 參數列表:必須與被重寫方法的參數列表完全匹配。
  • 返回類型:必須與超類中被重寫的方法中聲明的返回類型或子類型完全相同
  • 訪問級別:一定不能比被重寫方法強,可以比被重寫方法的弱。
  • 非檢查異常:重寫方法可以拋出任何非檢查的異常,無論被重寫方法是否聲明瞭該異常。
  • 檢查異常:重寫方法一定不能拋出新的檢查異常,或比被重寫方法聲明的檢查異常更廣的檢查異常
  • 不能重寫標誌爲final,static的方法

其中:
  1. 父類與子類之間的多態性,對父類的函數進行重新定義。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類並不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要採用方法的重寫。方法重寫又稱方法覆蓋。
  2. 若子類中的方法與父類中的某一方法具有相同的方法名、返回類型和參數表,則新方法將覆蓋原有的方法。如需父類中原有的方法,可使用super關鍵字,該關鍵字引用了當前類的父類。
  3. 子類函數的訪問修飾權限不能少於父類的;
  
重載方法的規則:
  1. 參數列表:被重載的方法必須改變參數列表。
  2. 返回類型:可以改變返回類型。
  3. 修飾符:可以改變修飾符
  4. 異常:可以聲明新的或者更廣泛的異常。
其中:
  1. 方法重載是讓類以統一的方式處理不同類型數據的一種手段。多個同名函數同時存在,具有不同的參數個數/類型。重載Overloading是一個類中多態性的一種表現。
  2. Java的方法重載,就是在類中可以創建多個方法,它們具有相同的名字,但具有不同的參數和不同的定義。調用方法時通過傳遞給它們的不同參數個數和參數類型來決定具體使用哪個方法, 這就是多態性。
  3. 重載的時候,方法名要一樣,但是參數類型和個數不一樣,返回值類型可以相同也可以不相同。無法以返回型別作爲重載函數的區分標準。
方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。
子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被“屏蔽”了,而且如果子類的方法名和參數類型和個數都和父類相同,那麼子類的返回值類型必須和父類的相同;如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱爲方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。也就是說,重載的返回值類型可以相同也可以不同。

如有錯誤,敬請指出。。。
ps:因爲是好久之前寫的了,我也不記得哪些是從別的文章中摘過來的了。敬請諒解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章