iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 16
0
Software Development

Dart 語言 - 開啟 Flutter 的鑰匙系列 第 16

Day 16:抽象類別 (Abstract class)

  • 分享至 

  • xImage
  •  

關鍵字 abstract 加在 class 前面,可以讓類別 (class) 成為抽象類別。
成為抽象類別之後,無法被實例化,只能被其他類別繼承。

abstract class Student {
		
}

我們可以在抽象類別裡面添加屬性、函數。

abstract class Student {
		String name;
		int age;
		
		void greeting(){
			print('Hello' );
		}
}

其他類別可以使用關鍵字 extends 來繼承抽象類別。

class FirstGradeStudent extends Student{}

之後,該類別就能使用父類別的定義的屬性、函數。

void main(){
	var firstGradeStudent = FirstGradeStudent();
	print(firstGradeStudent.greeting());
}
//Hello

通常,我們會稱抽象類別為父類別(Parent class)或超類別(Super class),繼承它的類別為子類別。

光是繼承,只是產生與父類別相同的類別。

子類別可以依照需求,將父類別的屬性、函數覆寫。亦或是新增子類別自己的屬性以及函數。

覆寫 (Override)

在子類別中,直接定義與父類別同名、同樣數量引數、同樣回傳值的函數就會產生一個覆寫的函數。

class FirstGradeStudent extends Student{
	@override
	void greeting(){
			print("Hello, I'm first grade");
	}
}

為了增加可讀性,在覆寫的函數上加上 @override,在閱讀程式碼的時候,便會清楚的知道該函數是繼承父類別的。

IDE 的提示符號

  • IDE 在類別被宣告為抽象類別時,旁邊會出現一個箭頭朝下的圖案,這表示是可以被繼承的。
  • 在子類別繼承父類別後,並且覆寫父類別之函數,IDE 也會在函數的左方出現一個箭頭朝上的圖案,表示這個函數是繼承而來的。

https://ithelp.ithome.com.tw/upload/images/20200916/20129264O2o0adAymv.png

抽象類別的函數

上面的範例中,我們為抽象類別定義了一個函數,並且有一個實作的內容,子類別在繼承抽象類別之後可以選擇要不要覆寫該函數。

我們也可以在抽象類別裡加入沒有實作的函數 (函數的定義),那麼,繼承該抽象類別的子類別,就必須要實作該函數。

例如:

abstract class Student {
		String name;
		int age;
		void greeting();
}
class FirstGradeStudent extends Student{
	@override
	void greeting(){
			print("Hello, I'm first grade");
	}
}

小結

Dart 是一個物件導向的程式語言,我們可以將功能定義在抽象類別裡,再由其他類別繼承實作。

透過這樣的方式,我們就可以將實作與定義分離,將定義放在抽象類別裡,就可以清楚的知道該類別負責什麼功能。


上一篇
Day 15:方法(Method)、getter 以及 setter
下一篇
Day 17:隱性介面 (Implicit interface)
系列文
Dart 語言 - 開啟 Flutter 的鑰匙30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言