iT邦幫忙

2022 iThome 鐵人賽

DAY 22
0

進階繼承觀念

延續昨天類別繼承的主題,接下來的內容會再稍微複雜一點。

在這之前,我們先簡單複習一下繼承的觀念 :

  1. 子類別延伸主類別的屬性,並增加新的內容
  2. 父類別可被多個子類別繼承,子類別只能繼承一個父類別
  3. 子類別基本上可完整繼承父類別內容,除了建構元、 修飾詞privatedefault

利用函數繼承存取權限修飾詞

這邊會分享較完整的程式碼,會透過此去做關於建構元與修飾詞之繼承問題

相信更全面的內容對於理解「繼承」這個觀念能更快更熟悉上手!!!

class example{
	private double answer;
	private double num = 12.6;

	public example(){
		System.out.println("Superclass was called ! ");
	}
	
	public void add_float(double temp){
		answer = num + temp;
		System.out.println("new_float = " + answer );
	}
}

class example01 extends example{
	private int count = 0;

	public example01(){
		System.out.println("Subclass was called ! ");
	}

	public example01(String name){
		System.out.println("Editor : " + name);
	}
	
	public void add_int(int temp){
		count += temp;
		System.out.println("new_int = " + count);
	}
	
	public void show(){
		System.out.println("End of this example ! ");
	}
}

public class Main{
	public static void main(String[] args){
		example01 new_obj = new example01();
		example01 new_obj_one = new example01("Jason");
		new_obj.add_int(6);
		new_obj.add_float(12.06);
		new_obj.show();
	}
}

程式結果 :
https://ithelp.ithome.com.tw/upload/images/20221007/20151216Nu94M8lbeV.png


程式解析

在這支程式中,有三個重點值得注意 :

  1. private如何被存取
  • 透過函數存取 :
    因為private變數不能被子類別繼承。如果我們不使用如封包之處理概念,可以利用由父類別繼承過來的函數中內容來讀取使用與印出。
  1. 建構元多載(overloading)
    觀察內容,發現在子類別中有兩個名稱相同的建構元,這就是我們之前提到的「多載」概念。建構元一樣可以多載,一樣必須傳入不同的引數內容,在定義時要注意物件名稱的不同。

  2. 建構元呼叫

  • 如我們前面所分享的,建構元並不會被繼承 :
    這邊先看到父類別與子類別都有提示呼叫的建構元訊息。當我們在主函數中建立子類別的物件,從結果會看到反而是父類別先被呼叫,接著才是子類別。這邊原因在於子類別是繼承父類別的屬性,所以先呼叫父類別的建構元原因在於..

初始化主類別內容,再者執行子類別的初始化過程

( 此範例建構元之多載也是這個意思 )


礙於篇幅問題,明天的章節將會繼續介紹關鍵字thisspuer用在繼承上的模式。
並且結合前述概念做整理。
以上內容若有誤或任何問題,煩請不吝嗇告知,謝謝您!!!/images/emoticon/emoticon75.gif


上一篇
Day 21 : 類別繼承 ( 1 )
下一篇
Day 23 : 類別繼承( 3 )
系列文
30天Java由淺入深30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言