繼承是面向對象的三大特征之一。繼承和現實生活中的“繼承”的相似之處是保留一些父輩的特性,從而減少代碼冗余,提高程序運行效率。
Java 中的繼承就是在已經存在類的基礎上進行擴展,從而產生新的類。已經存在的類稱為父類、基類或超類,而新產生的類稱為子類或派生類。在子類中,不僅包含父類的屬性和方法,還可以增加新的屬性和方法。
Java 中子類繼承父類的語法格式如下:
修飾符 class class_name extends extend_class { // 類的主體}
其中,class_name 表示子類(派生類)的名稱;extend_class 表示父類(基類)的名稱;extends 關鍵字直接跟在子類名之后,其后面是該類要繼承的父類名稱。例如:
public class Student extends Person{}
Java 的繼承通過 extends 關鍵字來實現,extends 的英文意思是擴展,而不是繼承。extends 很好的體現了子類和父類的關系,即子類是對父類的擴展,子類是一種特殊的父類。從這個角度看,使用繼承來描述子類和父類的關系是錯誤的,用擴展更恰當。
那么為什么國內把 extends 翻譯為“繼承”呢?子類擴展父類之后就可以獲得父類的屬性和方法,這與漢語中的繼承(子類從父類獲得一筆財富稱為繼承)具有相似性。
Java 與 C++ 定義繼承類的方式十分相似。Java 用關鍵字 extends 代替了 C++ 中的冒號(:)。在 Java 中,所有的繼承都是公有繼承, 而沒有 C++ 中的私有繼承和保護繼承。
填寫下面表單即可預約申請免費試聽java課程!害怕學不會?助教陪讀,隨時解惑!擔心就業(yè)?一地學習,可全國推薦就業(yè)!
類的繼承不改變類成員的訪問權限,也就是說,如果父類的成員是公有的、被保護的或默認的,它的子類仍具有相應的這些特性,并且子類不能獲得父類的構造方法。
例 1
教師和學生都屬于人,他們具有共同的屬性:姓名、年齡、性別和身份證號,而學生還具有學號和所學專業(yè)兩個屬性,教師還具有教齡和所教專業(yè)兩個屬性。下面編寫 Java 程序代碼,使教師(Teacher)類和學生(Student)類都繼承于人(People)類,具體的實現步驟如下。
1)創(chuàng)建人類 People,并定義 name、age、sex、sn 屬性,代碼如下:
public class People { public String name; // 姓名 public int age; // 年齡 public String sex; // 性別 public String sn; // 身份證號 public People(String name, int age, String sex, String sn) { this.name = name; this.age = age; this.sex = sex; this.sn = sn; } public String toString() { return "姓名:" + name + "\n年齡:" + age + "\n性別:" + sex + "\n身份證號:" + sn; }}
如上述代碼,在 People 類中包含 4 個公有屬性、一個構造方法和一個 toString() 方法。
2)創(chuàng)建 People 類的子類 Student 類,并定義 stuNo 和 department 屬性,代碼如下:
public class Student extends People { private String stuNo; // 學號 private String department; // 所學專業(yè) public Student(String name, int age, String sex, String sn, String stuno, String department) { super(name, age, sex, sn); // 調用父類中的構造方法 this.stuNo = stuno; this.department = department; } public String toString() { return "姓名:" + name + "\n年齡:" + age + "\n性別:" + sex + "\n身份證號:" + sn + "\n學號:" + stuNo + "\n所學專業(yè):" + department; }}
由于 Student 類繼承自 People 類,因此,在 Student 類中同樣具有 People 類的屬性和方法,這里重寫了父類中的 toString() 方法。
注意:如果在父類中存在有參的構造方法而并沒有重載無參的構造方法,那么在子類中必 須含有有參的構造方法,因為如果在子類中不含有構造方法,默認會調用父類中無參的構造方法,而在父類中并沒有無參的構造方法,因此會出錯。
3)創(chuàng)建 People 類的另一個子類 Teacher,并定義 tYear 和 tDept 屬性,代碼如下:
public class Teacher extends People { private int tYear; // 教齡 private String tDept; // 所教專業(yè) public Teacher(String name, int age, String sex, String sn, int tYear, String tDept) { super(name, age, sex, sn); // 調用父類中的構造方法 this.tYear = tYear; this.tDept = tDept; } public String toString() { return "姓名:" + name + "\n年齡:" + age + "\n性別:" + sex + "\n身份證號:" + sn + "\n教齡:" + tYear + "\n所教專業(yè):" + tDept; }}
Teacher 類與 Student 類相似,同樣重寫了父類中的 toString() 方法。
上一篇:Java7:多異常捕獲
下一篇: 沒有了
初級會計職稱中級會計職稱經濟師注冊會計師證券從業(yè)銀行從業(yè)會計實操統(tǒng)計師審計師高級會計師基金從業(yè)資格稅務師資產評估師國際內審師ACCA/CAT價格鑒證師統(tǒng)計資格從業(yè)
一級建造師二級建造師消防工程師造價工程師土建職稱房地產經紀人公路檢測工程師建筑八大員注冊建筑師二級造價師監(jiān)理工程師咨詢工程師房地產估價師 城鄉(xiāng)規(guī)劃師結構工程師巖土工程師安全工程師設備監(jiān)理師環(huán)境影響評價土地登記代理公路造價師公路監(jiān)理師化工工程師暖通工程師給排水工程師計量工程師
執(zhí)業(yè)藥師執(zhí)業(yè)醫(yī)師衛(wèi)生資格考試衛(wèi)生高級職稱護士資格證初級護師主管護師住院醫(yī)師臨床執(zhí)業(yè)醫(yī)師臨床助理醫(yī)師中醫(yī)執(zhí)業(yè)醫(yī)師中醫(yī)助理醫(yī)師中西醫(yī)醫(yī)師中西醫(yī)助理口腔執(zhí)業(yè)醫(yī)師口腔助理醫(yī)師公共衛(wèi)生醫(yī)師公衛(wèi)助理醫(yī)師實踐技能內科主治醫(yī)師外科主治醫(yī)師中醫(yī)內科主治兒科主治醫(yī)師婦產科醫(yī)師西藥士/師中藥士/師臨床檢驗技師臨床醫(yī)學理論中醫(yī)理論