天天看點

教妹學Java(二十八):Java 繼承的類型

三妹開學了,學的計算機軟體程式設計。她學校離我家很近,坐公共汽車也就 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 中的繼承有哪些類型

繼承可以分為單繼承、多重繼承、不同類繼承同一個類、多繼承。文字上可能不太直覺,我畫了四幅圖,來看一下。

教妹學Java(二十八):Java 繼承的類型
教妹學Java(二十八):Java 繼承的類型
教妹學Java(二十八):Java 繼承的類型
教妹學Java(二十八):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 中的繼承,我們就學到這裡吧,它的用法我相信你一定全部掌握了。”我揉一揉犯困的雙眼,疲憊地給三妹說。

“好的,二哥,我這就去練習去。”三妹似乎意猶未盡,這種學習狀态真令我感到開心。