iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 17
0
Software Development

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

Day 17:隱性介面 (Implicit interface)

關於介面 (interface)

介面所表示的意思是:「所有實作出本介面的類別,看起來都應該像這樣」。

Dart 並沒有像其他物件導向語言一樣有關鍵字 interface。因為在 Dart 中存在的是隱性介面。

隱性介面 (Implicit interface)

所謂隱性介面就是一般的類別也能夠化身為介面 (Interface),讓其他的類別實作 (Implement)。

有一個 Car 類別,內容如下:

class Car {
	final String brand;
	final String color;
	
	Car(this.brand, this.color);

	void horn() => throw UnimplementedError();
}
  • 我們可以使用關鍵字implements 關鍵字來實作該“隱性介面”。
class Truck implements Car{
	  @override
	  String get brand;
	
	  @override
	  String get color;
		
		Truck(this.brand, this.color);

	  @override
	  void horn() {
	    print('BBB');
	  }
}

發現什麼?

  1. 隱性介面類別裡的屬性、函數會轉為介面裡的屬性與函數,所以實作該隱性介面的類別就必須要實作。
  2. 利用註解 @override 提示這是覆寫的屬性或是函數。

實作多個介面

implements 後方用逗號隔出各個需實作的介面

class ElectricCar implements Car, Battey{}

介面與抽象類別,為介面與實作的隔離,提供了更結構化的方式。

去耦合 (Decoupling)

當方法依附在類別而非介面時,你只能透過該類別或是其子類別來使用該方法。

使用介面,可以把與類別的依賴轉為與介面的依賴,可以寫出更具重用性的程式碼。

小結

抽象類別使用關鍵字 extends 實作抽象類別,每一個類別都只能實作一個抽象類別,而介面利用關鍵字 implements實作,可以同時實作多個介面。


上一篇
Day 16:抽象類別 (Abstract class)
下一篇
Day18:Mixin
系列文
Dart 語言 - 開啟 Flutter 的鑰匙30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言