携手创造,共同成长!这是我参加「日新方案 8 月更文应战」的第9天,点击检查活动详情

引荐运用线上编辑器 dartpad.cn 进行学习,测验~

之前的系列文章咱们已经初步涉猎了承继和多态。本文,咱们来聊聊它们。

承继

Dart 中的承继是单承继,也便是一个类只能有一个直接的父类。默认承继父类 Object 类。运用 extends 关键字,子类会承继父类的特点和办法。

void main() {
  Child child = new Child();
  child.name = 'Jimmy';
  child.sayHi(); // Jimmy say Hi.
}
class Father {
  String name = ''; // 特点 - 名称
  // 办法名
  void sayHi() {
    print(this.name + ' say Hi.');
  }
}
class Child extends Father {
  double height = 0.0;
}

混入(Mixin)的语法,允许子类承继父类时混入其他的类。后边再讲解。

Child 承继了 Father 类的办法 sayHi(),那么咱们子类中能否运用这个办法呢?答案是能的。这里就涉及到办法重写了。咱们在子类中新建一个父类同名的办法 sayHi() 即可,如下:

class Child extends Father {
  double height = 0.0;
  void sayHi() {
    print('Child say Hi');
  }
  // @override
  // void sayHi() {
  //   print('Child say Hi');
  // }
}

再次运行代码 child.sayHi(); 就会输出 Child say Hi 的案牍了。

你可认为办法重写添加上 @override 的关键字,引荐加上关键字的写法,让人知道这个办法在父类上存在的。

多态

多态是同一种行为具有不同表现形式或形状。

长处:

  • 消除类型之间的耦合联系
  • 可代替性
  • 可扩充性
  • 接口
  • 灵活性
  • 简化性

存在的三个必要条件:

  • 承继
  • 重写
  • 父类引用指向子类目标
void main() {
  Animal dog = new Dog(); 
  dog.eat(); // Dog eat meat.
  Animal sheep = new Sheep();
  sheep.eat(); // Sheep eat grass.
}
class Animal {
  void eat() {
    print('Animal class eat.');
  }
}
class Dog extends Animal {
  @override
  void eat() {
    print('Dog eat meat.');
  }
}
class Sheep extends Animal {
  @override
  void eat() {
    print('Sheep eat grass.');
  }
}

比如上面的演示。DogSheep 都承继于 Animal,两者都重写了 Animal 中的 eat() 方。上面声明的两个目标实例都是父类的 Animal,可是实际指向的都是子类的一个目标。

Animal dog = new Dog();
Animal sheep = new Sheep();

往期精彩引荐

  • Dart 知识点 – 数据类型
  • Flutter 开发呈现的那些 Bugs 和解决方案「持续更新… 」

如果读者觉得文章还可以,不防一键三连:关注➕点赞➕保藏