三妹開學了,學的計算機軟體程式設計。她學校離我家很近,坐公共汽車也就 10 站路的距離, 每逢周末她都會來找我,讓我輔導她學習 Java。作為一名擁有十餘年程式設計經驗的程式員,再加上父母給我們的這份血緣關系,我覺得義不容辭。
“二哥,今天我們要學習的内容是‘繼承’,對吧?”看來三妹已經提前預習了我上次留給她的作業。
“是的,三妹。繼承是 Java 中的一種機制。 ”我面帶着樸實無華的微笑回答着她,“可以讓子類繼承到父類的狀态和行為,是面向對象程式設計語言一個重要的部分。”
“繼承背後的思想是,你可以在已有類的基礎上建立一個類,新類就可以重用基類的方法和字段。當然了,新類中也可以添加屬于自己的方法和字段。”
“繼承反映了一種‘is-a’的關系,也就是所謂的父子關系。”
----正兒八經的分割線,正文開始------------
01、為什麼要在 Java 中使用繼承
繼承的好處有兩點:
通過方法的重寫可以實作運作時多态;
提高代碼的可重用性。
來了解一下繼承方面的術語:
子類:子類是指繼承了别的類的類,有時也叫派生類、擴充類;
父類:父類是指子類繼承的類,有時也叫超類、基類;
可重用性:顧名思義,可重用性是一種機制,可以在建立新類的時候友善重用現有類中已經定義好的方法和字段。
繼承的文法如下所示:
class Subclass-name extends Superclass-name
{
// 方法和字段
}
extends 關鍵字表明子類 Subclass 正在繼承父類 Superclass,extends 的意思就是擴充,子類除了可以繼承父類的資産(字段和方法),也可以新增父類中沒有的字段和方法。
/**
* @author 微信搜「沉默王二」,回複關鍵字 PDF
*/
class Employee {
float salary = 40000;
}
class Programmer extends Employee {
int bonus = 10000;
public static void main(String args[]) {
Programmer p = new Programmer();
System.out.println("程式員的薪水是 " + p.salary);
System.out.println("程式員的獎金是:" + p.bonus);
}
程式員(Programmer)是一個雇員(Employee),它繼承了父類的薪水(salary),又新增了獎金(bonus)。
02、 Java 中的繼承有哪些類型
繼承可以分為單繼承、多重繼承、不同類繼承同一個類、多繼承。文字上可能不太直覺,我畫了四幅圖,來看一下。

四幅圖看完後,是不是瞬間就清楚多了?那再來結合代碼看一看,就更清楚明了了。
1)單繼承
class Animal {
void eat() {
System.out.println("吃...");
class Dog extends Animal {
void bark() {
System.out.println("叫喚...");
class SingleInheritanceDemo {
public static void main(String[] args) {
Dog d = new Dog();
d.bark();
d.eat();
在上面的例子中,Dog 繼承了 Animal,是以 dog 除了 bark(),還可以 eat()。
2)多重繼承
class Animal1 {
class BabyDog extends Dog {
void weep() {
System.out.println("嗷嗷地哭...");
class MultilevelInheritanceDemo {
BabyDog d = new BabyDog();
d.weep();
BabyDog 繼承了 Dog,Dog 繼承了 Animal,是以 BabyDog 不僅可以 weep(),還可以 bark() 和 eat()。
3)不同類繼承同一個類
System.out.println("汪汪汪...");
class Cat extends Animal {
void meow() {
System.out.println("喵喵喵...");
public class HierarchicalInheritanceDemo {
Cat c = new Cat();
c.meow();
c.eat();
Cat 繼承了 Animal,Dog 繼承了 Animal,是以 cat 和 dog 都可以 eat()。
“二哥,為什麼 Java 不支援多繼承呢?”三妹問了一個面試官都喜歡問的問題。
“是這樣啊,三妹。”這問題一點也難不倒我。“為了降低複雜性和簡化語言,Java 不支援多繼承。”
“考慮這樣一個場景,其中 A、B、C 是三個類,C 類繼承了 A 類和 B 類,如果 A 類和 B 類具有相同的方法,子類對象想調用這個方法,那究竟是該調用 A 類的方法還是 B 類的方法呢?”
03、ending
“三妹,關于 Java 中的繼承,我們就學到這裡吧,它的用法我相信你一定全部掌握了。”我揉一揉犯困的雙眼,疲憊地給三妹說。
“好的,二哥,我這就去練習去。”三妹似乎意猶未盡,這種學習狀态真令我感到開心。