美文网首页
Dart 抽象类 多态 接口

Dart 抽象类 多态 接口

作者: XieHenry | 来源:发表于2020-08-13 09:52 被阅读0次

1.抽象类

Dart中抽象类: Dart抽象类主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口。
1、抽象类通过abstract 关键字来定义
2、Dart中的抽象方法不能用abstract声明,Dart中没有方法体的方法我们称为抽象方法。
3、如果子类继承抽象类必须得实现里面的抽象方法
4、如果把抽象类当做接口实现的话必须得实现抽象类里面定义的所有属性和方法。
5、抽象类不能被实例化,只有继承它的子类可以

//案例:定义一个Animal 类要求它的子类必须包含eat方法
abstract class Animal {
  eat(); //抽象方法
  run(); //抽象方法
  printInfo() {
    print('我是一个抽象类里面的普通方法');
  }
}


class Dog extends Animal {
  @override
  eat() {
     print('小狗在吃骨头');
  }
  @override
  run() {
    // TODO: implement run
    print('小狗在跑');
  }
}

//main函数中调用
Dog d = new Dog();  
d.eat();      //小狗在吃骨头
d.printInfo();//我是一个抽象类里面的普通方法

2.多态

Datr中的多态:(1是官方解释。2 3为通俗理解)
1.允许将子类类型的指针赋值给父类类型的指针, 同一个函数调用会有不同的执行效果 。
2.子类的实例赋值给父类的引用。
3.多态就是父类定义一个方法不去实现,让继承他的子类去实现,每个子类有不同的表现。

//简单例子
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中函数调用
Animal d = new Dog();
d.eat();

Animal c = new Cat();
c.eat();

3.接口

和Java一样,dart也有接口,但是和Java还是有区别的。
首先,dart的接口没有interface关键字定义接口,而是普通类或抽象类都可以作为接口被实现。
同样使用implements关键字进行实现。
但是dart的接口有点奇怪,如果实现的类是普通类,会将普通类和抽象中的属性的方法全部需要覆写一遍。
而因为抽象类可以定义抽象方法,普通类不可以,所以一般如果要实现像Java接口那样的方式,一般会使用抽象类。
建议使用抽象类定义接口。

abstract class Db{   //当做接口   接口:就是约定 、规范
    String uri;      //数据库的链接地址
    add(String data);
    save();
    delete();
}


class Mysql implements Db{
  @override
  String uri;

  Mysql(this.uri);

  @override
  add(data) {
    // TODO: implement add
    print('这是mysql的add方法'+data);
  }

  @override
  delete() {
    // TODO: implement delete
    return null;
  }
  @override
  save() {
    // TODO: implement save
    return null;
  }
  remove(){
  }
}

class MsSql implements Db{
  @override
  String uri;
  @override
  add(String data) {
    print('这是mssql的add方法'+data);
  }

  @override
  delete() {
    // TODO: implement delete
    return null;
  }

  @override
  save() {
    // TODO: implement save
    return null;
  }
}

//main函数中调用
Mysql mysql=new Mysql('xxxxxx');
mysql.add('1243214');

4.一个类实现多个接口

//Dart中一个类实现多个接口:
abstract class A{
  String name;
  printA();
}

abstract class B{
  printB();
}

class C implements A,B{  
  @override
  String name;  
  @override
  printA() {
    print('printA');
  }
  @override
  printB() {
    // TODO: implement printB
    return null;
  }
}

//main函数中实现
C c = new C();
c.printA();

5.Dart中的mixins

mixins的中文意思是混入,就是在类中混入其他功能。
在Dart中可以使用mixins实现类似多继承的功能
因为mixins使用的条件,随着Dart版本一直在变,这里讲的是Dart2.x中使用mixins的条件:
1、作为mixins的类只能继承自Object,不能继承其他类
2、作为mixins的类不能有构造函数
3、一个类可以mixins多个mixins类
4、mixins绝不是继承,也不是接口,而是一种全新的特性

class A {
  String info="this is A";
  void printA(){
    print("A");
  }
}

class B {
  void printB(){
    print("B");
  }
}

class C with A,B{
  
}

//main函数中调用
var c=new C();  
c.printA();
c.printB();
print(c.info);

相关文章

  • Dart 抽象类 多态 接口

    1.抽象类 Dart中抽象类: Dart抽象类主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口。1、抽象...

  • Flutter/Dart - Dart中的抽象类 多态 和接口

    Dart中的抽象类 Dart中的抽象类: Dart抽象类主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口...

  • Dart 抽象类 多态 和接口

    抽象类 Dart中的抽象类:Dart抽象类主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口。抽象类通过a...

  • 10.Dart-抽象类

    /** * Dart中的抽象类 * Dart抽象类主要用于定义标准, 子类可以继承抽象类, 也可以实现抽象类接口...

  • Dart中的抽象类 多态 以及接口

    抽象类 Dart中抽象类: Dart抽象类主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口。 1、抽象类...

  • Dart中extends和implements

    Dart中抽象类: Dart抽象类主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口。1、抽象类通过abs...

  • Dart的抽象类和接口

    Dart中抽象类 Dart抽象类主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口。1、抽象类通过abst...

  • java抽象类和接口小记

    Java抽象类和接口小记 Java抽象类和接口实现了java的多态.多态是面向对象程序语言的核心,在项目开发过程中...

  • 09Dart语言基础-继承与多态

    1.继承 main.dart person.dart student.dart 2.抽象类与接口 3.Mixin混...

  • 芦继超10.27总结

    今天老师讲了多态,抽象类,和接口,多态和抽象类还是挺好理解的,之后的接口没太懂,不会用,下午助教老师又讲了一下,收...

网友评论

      本文标题:Dart 抽象类 多态 接口

      本文链接:https://www.haomeiwen.com/subject/eblpdktx.html