Java 面向對象編程——繼承

OOP(面向對象)語言的 三大特性爲:封裝、繼承、多態。
此文章將介紹關於繼承的內容。

創建三個類在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
從上述三個類中的紅色圈出部分發現,代碼的重複性比較高*
在實際寫代碼的過程中,代碼的可重用性比較低,接下來就介入了繼承的操作

extends 繼承

public class Animal {
    public String name;

    public void eat(){
        System.out.println(this.name + "喫飯!");
    }
}

public class Dog extends Animal {
    public String name;

    public void eat(){
        System.out.println(this.name + "喫飯!");
    }
}

在這裏插入圖片描述
上述代碼塊中,Dog 爲子類,也叫做派生類,Animal爲父類,也叫做基類或者超類,extends 代表繼承關係,Dog 繼承了 Animal

作用:爲了代碼的可重用性(重複使用)

示例:當把Dog類裏面的部分代碼屏蔽掉以後↓
當把Dog類裏面的部分代碼屏蔽掉以後
main方法中可以正常書寫 Dog 被屏蔽掉以後的代碼↓
在這裏插入圖片描述
並且可以正常運行↓
在這裏插入圖片描述
因爲 Dog 繼承了Animal ,所以 eat() 和 name 都被繼承過來
這樣就可以吧一些公共的屬性或者方法放在父類當中

注意事項

  • 當Bird 想要繼承 Animal 和 Dog兩個類的時候↓

注意:錯誤代碼↓
在這裏插入圖片描述

  • 當用private 修飾 name 以後, Bird 當中的 name 就不能被訪問↓
public class Animal {
    private String name;

    public void eat(){
        System.out.println(this.name + "喫飯!");
    }

在這裏插入圖片描述
當用private 修飾 name 以後, Bird 當中的 name 就不能被訪問↑

  • 當添加了Anmial 的構造方法以後
public class Animal {
    public String name;

    public void eat(){
        System.out.println(this.name + "喫飯!");
    }

    public Animal(String name) {		//寫了 Animal 的構造方法
        this.name = name;
    }
}

在這裏插入圖片描述
在這裏插入圖片描述
上述兩個圖片展示,此時,Dog 和 Bird 立刻報錯

注意事項:
1、Java 當中只能繼承一個類,不能同時繼承多個類,只支持單繼承。
2、父類的私有屬性和方法不能在自類當中進行訪問。
3、子類繼承了父類除構造方法外的所有東西。
4、子類繼承了父類,子類當中會包含父類的屬性。

super關鍵字

子類如果要實例化,那麼首先需要實例化父類,子類要構造,那麼你需要先構造父類。

子類當中如何構造父類?
答:構造對象只有一種方法,調用父類的構造方法來構造對象。藉助super 關鍵字。

super關鍵字:代表父類對象的引用。
1、super() ; 代表調用父類的構造方法,只能放在第一行。
2、super.data; 代表調用父類的屬性。
3、super.func(); 代表調用父類的成員方法。

public class Bird extends Animal{
    public int age;
    public Bird(String name,int age){
        super(name);		//子類並沒有繼承父類的構造方法,只是在子類當中
							//進行了顯示調用,通過super關鍵字        
        this.age = age;
        
    }

    public void fly(){
        System.out.println(this.name + "正在飛!");
    }
 
}

注意:super();只能調用一次。

protected 關鍵字

在這裏插入圖片描述
添加一個 protected 修飾的 sex ↓
在這裏插入圖片描述
建立兩個不同的包 ↓
在這裏插入圖片描述

在這裏插入圖片描述
Test 繼承了 Animal 用 super 後可以訪問 name
在這裏插入圖片描述
刪除 entends 關鍵字以後 super 也不能訪問↓
在這裏插入圖片描述

更復雜的繼承關係

// Animal.java 
public Animal { 
 ... 
} 
// Cat.java 
public Cat extends Animal { 
 ... 
} 
// ChineseGardenCat.java 
public ChineseGardenCat extends Cat { 
 ... 
} 
// OrangeCat.java 
public Orange extends ChineseGardenCat { 
 ... 
} 
......

在上述代碼中,這種繼承方式成爲多層繼承,即子類還可以派生出新的子類↑
注意:
一般我們不希望出現三層以上的繼承關係,如果繼承層數太多就要考慮重構。

final 關鍵字

如果一個類不想被繼承,在類前面加一個final 修飾
final int SIZE = 10; SIZE:常量 → 不能被修改
final 修飾的類:密封類 → 當前類不能被繼承
final 也可以修飾方法 叫做密封方法

繼承 → is…a… 的關係 → …是一個…
組合 →has…a… 或者 a part of…

下圖就構成了一個組合關係↓
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章