Extends

簡單來說就是繼承一個類別~

在Dart中,extends後面只能放一個類別

看個例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
abstract class Vehicle {
// 宣告屬性brand
String brand;

// 定義方法makeSomeNoise()
void makeSomeNoise();
}

class Car extends Vehicle {
// 繼承了尚未初始化的brand和尚未實作的方法makeSomeNoise()
// 方法必須先實作,屬性則不一定要動(不過我習慣會上個空字串"")
@override
void makeSomeNoise() {
print("WOOOOO");
}
}

class SportsCar extends Car {
// 繼承了尚未初始化的brand和已實作的方法makeSomeNoise()
// 初始化brand
String brand = "Benzzz";
// 當然這邊也可以覆寫makeSomeNoise()
}

void main() {
SportsCar myBenzzz = new SportsCar();
print(myBenzzz.brand);
myBenzzz.makeSomeNoise();
}

輸出:

1
2
Benzzz
WOOOOO

Implements

功能類似extends

不過如果今天換作implements的話

方法要全部重新實作!!!

方法要全部重新實作!!!

方法要全部重新實作!!!

很重要說三遍

在Dart中,implements後面能加上多個類別

修改一下上面的例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Horn {
void honk() {
print("BAAAAA");
}
}

class SportsCar implements Car, Horn {
// 繼承了尚未初始化的brand和已實作的方法makeSomeNoise(), honk()
String brand = "Benzzz";

// 要重新實作所有方法
@override
void makeSomeNoise() {
print("YEEEEEEEEE");
}

@override
void honk() {
print("BALABALABA");
}
}

void main() {
SportsCar myBenzzz = new SportsCar();
print(myBenzzz.brand);
myBenzzz.makeSomeNoise();
myBenzzz.honk();
}

輸出:

1
2
3
Benzzz
YEEEEEEEEE
BALABALABA