繼承
Dart 使用 extends
關鍵字來繼承一個類。
特別的是,在 Dart 中,建構函式是不能被繼承的。
除了預設建構函式是空引數的類,其建構函式是能夠被子類自動繼承的。
如果子類想要呼叫父類的建構函式,可以使用 super
關鍵字。
class NewPoint extends Point{
NewPoint(x, y):super(x, y);
NewPoint.newOrigin():super.origin(){
print('$x, $y');
}
}
複製程式碼
當呼叫 NewPoint.newOrigin()
時,會先呼叫父類的 origin
建構函式,然後再執行該建構函式內的表示式。
其中, NewPoint.newOrigin()
形式的建構函式被成為 命名建構函式。
實現
在 Dart 中,使用 implements
關鍵字來繼承一個類。
它意味著子類繼承了父類的 API,但不繼承其實現。
不同於 Java,Dart 可以直接繼承一個普通類。
// A person. The implicit interface contains greet().
class Person {
// In the interface, but visible only in this library.
final _name;
// Not in the interface, since this is a constructor.
Person(this._name);
// In the interface.
String greet(String who) => 'Hello, $who. I am $_name.';
}
// An implementation of the Person interface.
class Impostor implements Person {
get _name => '';
String greet(String who) => 'Hi $who. Do you know who I am?';
}
String greetBob(Person person) => person.greet('Bob');
void main() {
print(greetBob(Person('Kathy')));
print(greetBob(Impostor()));
}複製程式碼