super
class Person { int age; string name; Person(int age, String name){ this.age = age; this.name = name; } void sayhi(){ print('my name is' this.name) } } class Worker extend Person{ int salary; Worker(int age, string name, int salary) : super(age, name){ //super表示要繼承父類的屬性 this.salary = salary; } @override //告訴編譯器和程序員他是一個重寫覆蓋父類的方法 void sayhi(){
super.sayhi() //表示調用父類的sayhi方法 print('my salary is'+ this.salary) } }
在dart中是單繼承只能繼承單個父類,不能繼承多個類,若想實現多繼承必須通過多混合的方式實現。extend關鍵字將變成with來實現混合
混合:同時具備多個類的方法
若類中有一個方法,混合里邊也有一個方法,則優先使用類自身的方法;
若只有混合里邊有同名的方法,在最后面的會生效(如下例子中sleep會生效),因為他把前邊的混合掉了
void main(){
var p = new Person(15,'sdf');
p.eat(); //並不會報錯
}
class Eat{ void eat(){ print('eat') } } class Sleep{ void sleep(){ print('sleep') } } class Person with Eat, sleep{ int age; string name; person(int age, string name){ this.age = age; this.name = name; } void sayhi(){ print('hi'); } }
抽象類
抽象類的關鍵詞:abstract,只有方法的定義,沒有方法的實現。存在的意義就是有這個想法但是還沒有實現。如果person類繼承了抽象類,則抽象類中方法的實現便交給繼承者實現;
抽象類另一個特點是不能被實例化
abstract class Chouxiang{ void ya() } class person extend Chouxiang{ void ya(){ print('sdf') } }