標籤:
繼承是類與類之間的關係,是一個很簡單很直觀的概念,與現實世界中的繼承(例如兒子繼承父親財產)類似。
繼承可以理解為一個類從另一個類擷取方法和屬性的過程。如果類B繼承於類A,那麼B就擁有A的方法和屬性。
繼承使用 extends 關鍵字。
例如我們已經定義了一個類 People:
1 class People{2 String name;3 int age;4 int height;5 6 void say(){7 System.out.println("我的名字是 " + name + ",年齡是 " + age + ",身高是 " + height);8 }9 }
如果現在需要定義一個類 Teacher,它也有 name、age、height 屬性和 say() 方法,另外還需要增加 school、seniority、subject 屬性和 lecturing() 方法,怎麼辦呢?我們要重新定義一個類嗎?
完全沒必要,可以先繼承 People 類的成員,再增加自己的成員即可,例如:
1 class Teacher extends People{ 2 String school; // 所在學校 3 String subject; // 學科 4 int seniority; // 教齡 5 6 // 覆蓋 People 類中的 say() 方法 7 void say(){ 8 System.out.println("我叫" + name + ",在" + school + "教" + subject + ",有" + seniority + "年教齡"); 9 }10 11 void lecturing(){12 System.out.println("我已經" + age + "歲了,依然站在講台上講課");13 }14 }
對程式的說明
- name 和 age 變數雖然沒有在 Teacher 中定義,但是已在 People 中定義,可以直接拿來用。
- Teacher 是 People 的子類,People 是Teacher 類的父類。
- 子類可以覆蓋父類的方法。
- 子類可以繼承父類除private以為的所有的成員。
- 構造方法不能被繼承。
繼承是在維護和可靠性方面的一個偉大進步。如果在 People 類中進行修改,那麼 Teacher 類就會自動修改,而不需要程式員做任何工作,除了對它進行編譯。
單繼承性:Java 允許一個類僅能繼承一個其它類,即一個類只能有一個父類,這個限制被稱做單繼承性。後面將會學到介面(interface)的概念,介面允許多繼承。
最後對上面的代碼進行整理:
1 public class Demo { 2 public static void main(String[] args) { 3 Teacher t = new Teacher(); 4 t.name = "小布"; 5 t.age = 70; 6 t.school = "清華大學"; 7 t.subject = "Java"; 8 t.seniority = 12; 9 t.say();10 t.lecturing();11 }12 }13 class People{14 String name;15 int age;16 int height;17 18 void say(){19 System.out.println("我的名字是 " + name + ",年齡是 " + age + ",身高是 " + height);20 }21 }22 class Teacher extends People{23 String school; // 所在學校24 String subject; // 學科25 int seniority; // 教齡26 27 // 覆蓋 People 類中的 say() 方法28 void say(){29 System.out.println("我叫" + name + ",在" + school + "教" + subject + ",有" + seniority + "年教齡");30 }31 32 void lecturing(){33 System.out.println("我已經" + age + "歲了,依然站在講台上講課");34 }35 }
運行結果:
我叫小布,在清華大學教Java,有12年教齡
我已經70歲了,依然站在講台上講課
注意:構造方法不能被繼承,掌握這一點很重要。 一個類能得到構造方法,只有兩個辦法:編寫構造方法,或者根本沒有構造方法,類有一個預設的構造方法。
系列文章:
Java知多少(1)語言概述
Java知多少(2)虛擬機器(JVM)以及跨平台原理
Java知多少(3) 就業方向
Java知多少(4)J2SE、J2EE、J2ME的區別
Java知多少(5) Java開發環境的搭建
Java知多少(6)第一個程式樣本
Java知多少(7)類與對象
Java知多少(8)類庫及其組織圖
Java知多少(9) import及Java類的搜尋路徑
Java知多少(10)資料類型及變數
Java知多少(11)資料類型轉換
Java知多少(12)運算子
Java知多少(13)流程式控制制
Java知多少(14)數組
Java知多少(15)字串
Java知多少(16)StringBuffer與StringBuider
Java知多少(17)強調一下編程風格
Java知多少(18)類的定義及其執行個體化
Java知多少(19)存取修飾詞(存取控制符)
Java知多少(20)變數的範圍
Java知多少(21)this關鍵字詳解
Java知多少(22)方法重載
Java知多少(23)類的基本運行順序
Java知多少(24)封裝類、拆箱和裝箱詳解
Java知多少(25)再談Java包
Java知多少(26)源檔案的聲明規則
Java知多少(27)繼承的概念與實現
Java知多少(27)繼承的概念與實現