iT邦幫忙

2022 iThome 鐵人賽

DAY 21
0
自我挑戰組

30天Java由淺入深系列 第 21

Day 21 : 類別繼承 ( 1 )

  • 分享至 

  • xImage
  •  

介紹

接下來兩天要介紹的內容就是物件導向非常核心的概念 -- 繼承(Inheritance)

繼承這個方法用在類別上簡單來說就是擴增程式碼,並保有原來之內容。

因為我們提到了「繼承」,所以可以舉出資料結構也是很有名的觀念 -- 二元樹(B tree)。

二元樹本身就是使用繼承的觀念,子節點繼承父親節點,物件導向正也使用到了類似這種概念。
https://ithelp.ithome.com.tw/upload/images/20221006/20151216xLUNOSM7w7.png

正如我們前面提及,在Java中都是「單向繼承」

一個父類別可以被多個子類別繼承 ; 但一個子類別不能同時繼承2個或以上的父類別。

綜合以上 :

  1. 父類別原有的屬性、函數變數都會被某個類別繼承。
  2. 子類別還會加上自己的屬性變數等,可以說是父類別的擴充。
  3. 不過我們通常都會解釋說子類別是父類別的一個延伸(extend)。

基礎繼承觀念

宣告繼承類別

我們想要宣告一類別是繼承另外一個類別的方式,會用到關鍵字extends

class School{
	/*...........
     description
    ...........*/
}

class Student extends School{
	/*......................
     description in School
	......................*/

	/*............
	 description
	............*/
}

子類別(Student)繼承父類別(School)中的內容,並新增新程式。
-> 類別繼承最後面的指令即是 extends + 父類別名稱。

  • 當我們想要在主程式中引用父類別的成員來使用時,可以直接建立一個子類別的物件來呼叫
    不過有以下兩種情況 :
  1. 父類別中的private變數
  2. 父類別的建構子(元)

這些情況都是不能被子類別直接繼承的,像private變數是需要封包內的getset 概念來存取。


存取權限修飾詞繼承

這邊我們介紹之前提到能被子類別繼承的前置修飾子protected

class School{
	protected String name = "Chi";
    protected float warning;
	public void show_Sname(){
		System.out.println("Personal Information : " + name);
	}
}

class Student extends School{
	public void show_warning(int late){
        warning = late / 3;
		System.out.println("You hava " + warning + " warnings");
	}
}

public class Main{
	public static void main(String[] args){
	Student paper = new Student();
    int late = 21;
		paper.show_Sname();
		paper.show_warning(late);
	}
}
  • 程式解析 :
  • 子類別(Student)繼承了父類別中的變數函數,而其變數修飾字為protected,它的存取權限可以到子類別和同套件的類別,假設這邊換成預設的模式,就不能被子類別所繼承。
  • 主程式中,我們只需建立Student的物件,即可使用繼承到父類別之屬性。

此章內容重點放在何謂繼承與如何使用繼承,下一章節也同為繼承內容,只是會介紹更進階的private如何被繼承以及運用物件相關關鍵字解釋不同的繼承概念。

以上內容若有誤或任何問題,煩請不吝嗇告知,謝謝您!!!/images/emoticon/emoticon47.gif


上一篇
Day 20 : 封裝與實作
下一篇
Day 22 : 類別繼承( 2 )
系列文
30天Java由淺入深30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言