Dart系列(十一)抽象类 abstract 多态 implements接口等


发文时间:2021年03月06日 01:58:36     编辑:Aaron      标签:记录Dart语言的学习历程 477


Dart是谷歌开发的计算机编程语言,后来被Ecma (ECMA-408)认定为标准。它被用于web、服务器、移动应用和物联网等领域的开发。

    抽象类(abstract) 只要不是公有的方法( data(){}这种的) ,只要继承了他 那么他的子类里 都要有里面的方法,也是规范。 就好比里面有 a b c方法,那么继承的子类里 必须要有这三种方法,如若抽象类中的方法没有方法体 那可无这个方法。

继承 (extends) 抽象类 (abstract)  实现 ( implements) 混合 mixin(with)
三者可同时存在,但是有先后顺序
extends -> mixin (with) -> implements
以思疼死 - 》 mi信(weisi) -》 int te mensi
关于 mixin机制?
mixin 是Dart为了解决多重继承。
mixin的对象是类,不是继承也不是接口,他有自己的特性,可以with多个minix类。
mixin定义的类不能有构造方法,这样可以避免继承多个类而产生的父类构造方法冲突。

image.png

父类写一个抽象方法,但是父类不去实现他,让子类去实现并且基于自身的需求去操作

/*
 *  抽象类只能用abstract来继承 抽象类不能被实例化   (定义标准)
 *  子类抽象类  也可以实现抽象类接口
 *  抽象类中的 extends 和 implement的区别
 */

//定义一个抽象类  让他的子类必须包含eat的方法 (以此做到约束和规范的作用)
abstract class Animal{
  
  eat();//定义一个方法 里面没有方法体的就是一个抽象方法 继承的类就必须要用这个方法 
  wosh();
  
  
  getInfo(){ //这个方法里有方法体 那就不是一个抽象方法 继承的类 可以不用有这个方法
    
    print('我是父类中的一个方法 你继承的话 可有 可不有');
  }
  
}


//定义一个类 来继承Animal
class Dog extends Animal{
  
  //继承了抽象类 就要有他里面的抽象方法 不然会报错
  eat(){
    print('小狗在吃骨头');
  }
   wosh(){
     
   }
  
  getDodInfo(){
    print('是哈奇士!');
  }
  
}

//在定义一个类去继承Animl
class Cat extends Animal{
  
  //继承了抽象类 就要有他里面的抽象方法 不然会报错  (也可以理解为多态)
  eat(){
    print('小猫在吃鱼');
  }
   wosh(){
     
   }
  
} 

main(){
  
  //调用dog的类
  Dog d=new Dog();
  d.eat();//输出小狗在吃骨头
  
  //通过dog调用自身的类
  d.getDodInfo();//成功调用
  
  //通过dog去调用 父类
  d.getInfo();// 成功调用
  
  print('-------------------分割线---------------------');

  //限定当前类 只能调用父类的方法 不可以调用子类的方法
  Animal a=new  Dog();
  a.getInfo();//成功调用父类的方法
  
  //尝试调用子类的方法
//   a.getDodInfo();//报错  因为只能调用父类的方法
}

多态的理解为 :父类定义的方法 父类不去实现,让他的子类去实现,基于业务需求而走,比较方便。

接口 :dart可以用普通类 或者抽象类 都可以作为接口被实现

implements 的引入操作

image.png

//dart中extends 继承、 implements 可以实现引入多个接口、with混入
/*
Dart中一个类实现多个接口:
*/

abstract class A{
  String name;
  printA();
 
  
}

abstract class B{
  printB();
  
  
}

class C implements A,B{  
  @override
  String name='1111';  
  @override
  printA() {
    print('printA');
  }
  @override
  printB() {
    // TODO: implement printB
    print('测试b方法');
  }
}


/*
 可以调用两个抽象类,但是抽象类里有公共方法 那就不行
 */
void main(){
  C c=new C();
  c.printA();
  c.printB();
  
 
}


 

若无特殊说明,此文章为博主原创。
写稿不易,如需转载,请注明出处: https://www.aaroner.cn/art/42.html




SITE MAP

  FOLLOW US