Dart中的抽象类,多态和接口

Dart学习(五)

抽象类

抽象类主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口。

  1. 抽象类通过abstract 关键字来定义;
  2. 抽象类中的抽象方法不能用abstract声明,抽象类中没有方法体的方法称为抽象方法;
  3. 子类继承抽象类必须实现抽象类中的抽象方法;
  4. 将抽象类当作接口实现必须实现抽象类中定义的所有属性和方法;
  5. 抽象类不能被实例化,继承它的子类可以;
abstract class Animal {
  void sound();

  void eat() {
    print("Animal is eating.");
  }
}

class Cat extends Animal {
  
  void sound() {
    print("Meow");
  }
}

void main() {
  //
// Animal animal = new Animal(); // 报错
  Cat cat = new Cat();
  cat.sound();
  cat.eat();
}

多态

允许将子类类型的指针赋值给父类类型的指针,同一个函数会有不同的执行结果,即将子类的实例赋值给父类的引用;
Dart中多态的表现:父类中定义一个抽象方法,让继承他的子类去实现,每一个子类会有不同的表现;

abstract class Animal {
  void sound(); // 抽象方法
}

class Cat extends Animal {
  
  void sound() {
    print("Meow!");
  }
}

class Dog extends Animal {
  
  void sound() {
    print("Woof!");
  }
}

void main() {
  List<Animal> animals = [
    new Cat(),
    new Dog(),
  ];
  
  for (Animal animal in animals) {
    animal.sound(); // 输出不同的声音
  }
}

extends和implements的使用场景

  1. 如果要复用抽象类中的方法,并且需要使用抽象类来约束所有继承的子类的时候用extends;
  2. 只是将抽象类当作标准的话使用implements实现抽象类接口;

接口

Dart中的接口是通过普通类或抽象类来实现的,使用implements关键字来实现;
实现接口会将普通类或抽象类中的属性方法全部重写,因此一般使用抽象类定义接口;

// 定义一个接口
abstract class Flyable {
  void fly();
}

// 实现接口的类
class Bird implements Flyable {
  
  void fly() {
    print("I'm flying!");
  }
}

// 测试Ï
void main() {
  Flyable flyable = Bird();
  flyable.fly(); // 输出:I'm flying!
}

Dart中一个类可以实现多个接口;

// 定义一个飞行行为的接口
abstract class Flyable {
  void fly();
}

// 定义一个游泳行为的接口
abstract class Swimmable {
  void swim();
}

// 定义一个可以飞行和游泳的鸟类
class Bird implements Flyable, Swimmable {
  String _name;
  
  Bird(this._name);
  
  
  void fly() {
    print('$_name is flying!');
  }
  
  
  void swim() {
    print('$_name is swimming!');
  }
}

void main() {
  Bird bird = Bird('Sparrow');
  bird.fly(); // 输出:Sparrow is flying!
  bird.swim(); // 输出:Sparrow is swimming!
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值