/* Dart中抽象類: Dart抽象類主要用於定義標准,子類可以繼承抽象類,也可以實現抽象類接口。 1、抽象類通過abstract 關鍵字來定義 2、Dart中的抽象方法不能用abstract聲明,Dart中沒有方法體的方法我們稱為抽象方法。 3、如果子類繼承抽象類必須得實現里面的抽象方法 4、如果把抽象類當做接口實現的話必須得實現抽象類里面定義的所有屬性和方法。 5、抽象類不能被實例化,只有繼承它的子類可以 extends抽象類 和 implements的區別: 1、如果要復用抽象類里面的方法,並且要用抽象方法約束自類的話我們就用extends繼承抽象類 2、如果只是把抽象類當做標准的話我們就用implements實現抽象類 案例:定義一個Animal 類要求它的子類必須包含eat方法 */ abstract class Animal{ eat(); //抽象方法 run(); //抽象方法 printInfo(){ print('我是一個抽象類里面的普通方法'); } } class Dog extends Animal{ @override eat() { print('小狗在吃骨頭'); } @override run() { // TODO: implement run print('小狗在跑'); } } class Cat extends Animal{ @override eat() { // TODO: implement eat print('小貓在吃老鼠'); } @override run() { // TODO: implement run print('小貓在跑'); } } main(){ Dog d=new Dog(); d.eat(); d.printInfo(); Cat c=new Cat(); c.eat(); c.printInfo(); // Animal a=new Animal(); //抽象類沒法直接被實例化 }
/* Datr中的多態: 允許將子類類型的指針賦值給父類類型的指針, 同一個函數調用會有不同的執行效果 。 子類的實例賦值給父類的引用。 多態就是父類定義一個方法不去實現,讓繼承他的子類去實現,每個子類有不同的表現。 */ abstract class Animal{ eat(); //抽象方法 } class Dog extends Animal{ @override eat() { print('小狗在吃骨頭'); } run(){ print('run'); } } class Cat extends Animal{ @override eat() { print('小貓在吃老鼠'); } run(){ print('run'); } } main(){ // Dog d=new Dog(); // d.eat(); // d.run(); // Cat c=new Cat(); // c.eat(); Animal d=new Dog(); d.eat(); Animal c=new Cat(); c.eat(); }