Java知多少(27)繼承的概念與實現

來源:互聯網
上載者:User

標籤:

繼承是類與類之間的關係,是一個很簡單很直觀的概念,與現實世界中的繼承(例如兒子繼承父親財產)類似。

繼承可以理解為一個類從另一個類擷取方法和屬性的過程。如果類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)繼承的概念與實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.