Dart抽象類和多態

/*
Dart中抽象類: Dart抽象類主要用於定義標準,子類能夠繼承抽象類,也能夠實現抽象類接口。


  一、抽象類經過abstract 關鍵字來定義

  二、Dart中的抽象方法不能用abstract聲明,Dart中沒有方法體的方法咱們稱爲抽象方法。

  三、若是子類繼承抽象類必須得實現裏面的抽象方法

  四、若是把抽象類當作接口實現的話必須得實現抽象類裏面定義的全部屬性和方法。

  五、抽象類不能被實例化,只有繼承它的子類能夠

extends抽象類 和 implements的區別:

  一、若是要複用抽象類裏面的方法,而且要用抽象方法約束自類的話咱們就用extends繼承抽象類

  二、若是隻是把抽象類當作標準的話咱們就用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();

 


}
相關文章
相關標籤/搜索