關鍵字 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),繼承它的類別為子類別。
光是繼承,只是產生與父類別相同的類別。
子類別可以依照需求,將父類別的屬性、函數覆寫。亦或是新增子類別自己的屬性以及函數。
在子類別中,直接定義與父類別同名、同樣數量引數、同樣回傳值的函數就會產生一個覆寫的函數。
class FirstGradeStudent extends Student{
@override
void greeting(){
print("Hello, I'm first grade");
}
}
為了增加可讀性,在覆寫的函數上加上 @override,在閱讀程式碼的時候,便會清楚的知道該函數是繼承父類別的。
上面的範例中,我們為抽象類別定義了一個函數,並且有一個實作的內容,子類別在繼承抽象類別之後可以選擇要不要覆寫該函數。
我們也可以在抽象類別裡加入沒有實作的函數 (函數的定義),那麼,繼承該抽象類別的子類別,就必須要實作該函數。
例如:
abstract class Student {
String name;
int age;
void greeting();
}
class FirstGradeStudent extends Student{
@override
void greeting(){
print("Hello, I'm first grade");
}
}
Dart 是一個物件導向的程式語言,我們可以將功能定義在抽象類別裡,再由其他類別繼承實作。
透過這樣的方式,我們就可以將實作與定義分離,將定義放在抽象類別裡,就可以清楚的知道該類別負責什麼功能。