You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
如果我們對 super class 得實作不滿意,可以在我們想複寫的 method 上加上 @override 以可以客製化我們想要的行為。
如果你只要 super class 定義好的 method 介面,但所有實作都想自己來,可以把 extends 換成 implements。
mixin 是 Dart 裡頭的另一個功能,因為 Dart 規定 sub class 最多只能繼承一個 super class,所以當我們有很多 class
他們的 super class 都不同,但我們想對這群 class 實作一個共同的行為,我們只能一個一個手動實作。mixin 提供了另一個
選擇,可以根據行為來擴充我們的繼承,而且這些擴充是線性疊加上去的(如果有重複 method 後面的會覆蓋前面的)。
可以理解一下下面的 code
classSuperHero {
String name ='';
voidmySuperPower() {
print("I'm $name, My super power is ...");
}
}
// Regulate this mixin to be used only in `SuperHero`'s// subclass. Because we use instance variable `name` that// is only define in `SuperHero`.mixinFlyonSuperHero {
voidfly() =>print('My name is $name, I can fly.');
}
mixinRaserEyes {
voidraserEyes() =>print('I have raser eyes.');
}
mixinStrength {
voidstrength() =>print('I have super strength.');
}
// Pure inheritance.classBatmanextendsSuperHero {
String name ='Batman';
}
// Re`implements` all the method of `SuperHero`.classFlashimplementsSuperHero {
String name ='Flash';
// Don't need `@override`.voidmySuperPower() {
print("I'm $name. I'm fast.");
}
}
classWonderWomanextendsSuperHerowithStrength {
String name ='Wonder Woman';
@overridevoidmySuperPower() {
print("I'm $name, ");
strength();
}
}
classSupermanextendsSuperHerowithFly, RaserEyes, Strength {
String name ='Superman';
@overridevoidmySuperPower() {
fly();
raserEyes();
strength();
}
}
voidmain() {
var batman =Batman();
var superman =Superman();
var wonderWoman =WonderWoman();
var flash =Flash();
batman.mySuperPower();
superman.mySuperPower();
wonderWoman.mySuperPower();
flash.mySuperPower();
}
輸出
I'm Batman, My super power is ...My name is Superman, I can fly.I have raser eyes.I have super strength.I'm Wonder Woman,
I have super strength.
I'm Flash. I'm fast.
"..Unless you want your mixin to be usable as a regular class, use the mixin keyword instead of class...."
官方文件的說法,感覺是加上mixin keyword可以避免用來生成物件,是一個保護作用。
Requirement
在物件導向程式設計裡,我們可以用繼承 (inheritance) 來減少重複的代碼(在 Dart 語言裡頭,繼承是用
extends
)。如果我們對 super class 得實作不滿意,可以在我們想複寫的 method 上加上
@override
以可以客製化我們想要的行為。如果你只要 super class 定義好的 method 介面,但所有實作都想自己來,可以把
extends
換成implements
。mixin
是 Dart 裡頭的另一個功能,因為 Dart 規定 sub class 最多只能繼承一個 super class,所以當我們有很多 class他們的 super class 都不同,但我們想對這群 class 實作一個共同的行為,我們只能一個一個手動實作。
mixin
提供了另一個選擇,可以根據行為來擴充我們的繼承,而且這些擴充是線性疊加上去的(如果有重複 method 後面的會覆蓋前面的)。
可以理解一下下面的 code
輸出
發揮你們的創意,在日常生活中找找類似的關係並實作成一個簡單的繼承架構,並練習以下的概念
extends
@override
implements
(optional)這次不用寫測試。
Reference
The text was updated successfully, but these errors were encountered: