簡談Java語言的繼承

Java語言的繼承

這裡簡談Java語言的三大特性之二——繼承。

Java語言的三大特性是循序漸進的、是有順序性的,應該按照封裝–>繼承–>多態這樣的順序依次學習

繼承的定義

百度百科中這樣定義繼承:繼承是面向對象最顯著的一個特性。它是從已有的類中派生出新的類,新的類能吸收已有類的數據屬性和行為,並能擴展新的能力。Java繼承是使用已存在的類的定義作為基礎建立新類的技術,新類的定義可以增加新的數據或新的功能,也可以用父類的功能,但不能選擇性地繼承父類。

繼承的本質是對某一批類的抽象,從而實現對現實世界更好的建模。舉個通俗易懂的例子:

動物是自然界中某些生物的統稱,(初中生物書上也有「界門綱目科屬種」),在動物之下,又有許多種類,比如說貓、狗、老虎、獅子等等,這些實體的動物既擁有所有動物的特性,又有自身獨有的一些特性,比如老虎頭上有個「王」字等等。

可以說繼承是類和類之間的一種關係,繼承關係的兩個類,一個為父類(基類),另一個為子類(派生類)。子類繼承父類,使用關鍵字:extends,子類和父類之間,從意義上來講應該具有「is a」的關係,例如上述的例子中:Tiger is an animal, Cat is an animal ……

除此之外,類和類之間的關係還有:依賴、組合、聚合等等,需要注意的是,Java中類的繼承只有單繼承,沒有多繼承

繼承的關鍵字

extends

extends的意思是「擴展」,具體說就是子類是父類的擴展(即派生類是基類的擴展)。

使用時也比較容易,創建新類時,在類名的後面加上extends,再加上繼承的父類名即可:

//父類
public class animal{
   //父類的相關屬性及方法
}
//子類
public class tiger extends animal{
   //子類的相關屬性及方法
}

繼承的程式碼示例

首先創建一個父類:Animal類

package 繼承示例;

public class Animal {
   public void breath(){
       System.out.println("animal can breath......");  //父類方法
  }
}

再創建一個子類:Tiger類,用來繼承父類

package 繼承示例;

public class Tiger extends Animal {
   public void eatMeat(){
       System.out.println("Tiger will eat meat......");    //子類方法
  }
}

最後創建一個測試主類:test類

package 繼承示例;

import java.util.function.ToDoubleBiFunction;

public class test {
   //這是一個測試類
   public static void main(String[] args) {
       Animal am=new Animal();
       am.breath();    //父類對象訪問父類方法,沒有問題
//       am.eatMeat(); //父類對象訪問子類方法,編譯報錯!表示無法訪問到

       System.out.println("============================================");
       Tiger tg=new Tiger();
       tg.breath();    //子類對象訪問父類方法,沒有問題
       tg.eatMeat();   //子類對象訪問子類方法,沒有問題
  }
}

測試結果如下:

animal can breath……

=================================

animal can breath……

Tiger will eat meat……

由此可見,繼承時,子類可以訪問父類和子類的方法,父類只能訪問父類的方法。

注意

  • 父類的private方法不能被繼承

  • 父類的static方法不能被繼承

  • 父類的final方法不能被繼承

  • 父類的構造方法不能被繼承

  • object類是所有類的父類(祖宗類)