iT邦幫忙

2022 iThome 鐵人賽

DAY 24
0

介紹

之前我們有介紹到關於封裝的概念,與今天分享的內容「抽象」觀念相似。

兩者目的都是希望達成「隱藏資訊」,保護特定資料!!!

接下來會將抽象成剖析成幾個部分個別去做說明。


抽象類別與函數

  • 講到抽象類別,最要注意的部分是 : 它本身不能用來創造物件

宣告方式參考下列程式碼 :

abstract class Car{
	protected long price_cost = 1000000;
	public String car_brand = "Mercedes";
	public void fast(){
		System.out.println("300 km/h");
	}
	public abstract void type(String brand);
}

抽象abstract是非存取權限之修飾詞,宣告時我們一樣是 “修飾詞 + 類別 + 類別名稱” 的方式

觀察程式,可以發現我們只有宣告fast()中的內容,而抽象類別的內容為甚麼不一起宣告 ?

  • 抽象類別中的抽象函數不能定義初始內容( fast()是一般函數 )

-> 通常我們會透過繼承其之子類別來進行改寫。

  • 需要存取類別中的抽象函數,則一樣透過繼承的觀念去實作。

-> 而正因為我們需要被子類別繼承,存取權限修飾詞有一定的限制 :

抽象函數的前置修飾子不能為預設(default) & 隱私(private)


這邊我們繼續介紹關於如何繼承抽象類別的函數。

抽象繼承

class information extends Car{
	public int modelYear = 2022;
	public abstract void type(String brand){
		System.out.println(brand + " : " + "GLC SUV");
	}
}

此程式中,宣告了抽象函數中的內容。
當我們在主程式需要使用到此部分之內容,則可以創立物件去做使用。


  • 最後我們統整一下上述分享的內容 :
  1. 抽象類別不能創立物件
  2. 抽象函數不定義初始內容
  3. 透過繼承觀念去存取抽象函數之內容
  4. 使用抽象函數須注意存取權限修飾詞的使用

範例

綜合上述,提供以下程式範例 :

abstract class Car{
	protected long price_cost = 1000000;
	public String car_brand ;
	public void fast(){
		System.out.println("300 km/h");
	}
	public abstract void type();  //abstract method
}

class information extends Car{
	information(String brand){
		super.car_brand = brand;
	}
	public int modelYear = 2022;
	public abstract void type(){ 
		System.out.println(brand + " : " + "GLC SUV"); // the abstract method body
	}
}

class Main {
  public static void main(String[] args) {
    information new_obj = new information("Mercedes");
	new_obj.type();  // Outputs ->  Mercedes : GLC SUV
  }
}

抽象類別是用來被繼承(inheritance) ; 抽象函數是用來被改寫(override)

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


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

尚未有邦友留言

立即登入留言