Flutter語法(1):extends 、 implements 、 with的用法與區別
在Flutter中,有如下三種關係:
- 繼承(關鍵字 extends)
- 混入 mixins (關鍵字 with)
- 介面實現(關鍵字 implements)
這三種關係可以同時存在,但是有前後順序:
extends ->mixins -> implements
extens在前,mixins在中間,implements最後,接下來看具體的例子。
1. 繼承(extends)
Flutter中的繼承和Java中的繼承是一樣的:
@override super
Flutter中的繼承也有和Java不一樣的地方:
- Flutter中的子類可以訪問父類中的所有變數和方法,因為Flutter中沒有公有、私有的區別
講完特性,看下面的程式碼加深理解:
class Television { void turnOn() { _illuminateDisplay(); } void _illuminateDisplay(){ } } class SmartTelevision extends Television { void turnOn() { super.turnOn(); _bootNetworkInterface(); } void _bootNetworkInterface(){ } } 複製程式碼
2.混合 mixins (with)
在Flutter 中:
- 混合的物件是類
- 可以混合多個
mixins 具體的特性,可以檢視我之前寫得文章:Flutter mixins 探究
看具體程式碼:
class Television { void turnOn() { _illuminateDisplay(); } void _illuminateDisplay(){ } } class Update{ void updateApp(){ } } class Charge{ void chargeVip(){ } } class SmartTelevision extends Television with Update,Charge{ void turnOn() { super.turnOn(); _bootNetworkInterface(); updateApp(); chargeVip(); } void _bootNetworkInterface(){ } } 複製程式碼
3.介面實現(implements)
Flutter是沒有interface的,但是Flutter中的每個類都是一個隱式的介面,這個介面包含類裡的所有成員變數,以及定義的方法。
如果有一個類 A,你想讓類B擁有A的API,但又不想擁有A裡的實現,那麼你就應該把A當做介面,類B implements 類A.
所以在Flutter中:
@override @override
看如下的程式碼:
class Television { void turnOn() { _illuminateDisplay(); } void _illuminateDisplay(){ } } class Carton { String cartonName = "carton"; void playCarton(){ } } class Movie{ void playMovie(){ } } class Update{ void updateApp(){ } } class Charge{ void chargeVip(){ } } class SmartTelevision extends Television with Update,Charge implements Carton,Movie { @override String cartonName="SmartTelevision carton"; void turnOn() { super.turnOn(); _bootNetworkInterface(); updateApp(); chargeVip(); } void _bootNetworkInterface(){ } @override void playCarton() { // TODO: implement playCarton } @override void playMovie() { // TODO: implement playMovie } } 複製程式碼