Flutter

6. Dart - 抽象类 及 接口的定义

2021-03-08  本文已影响0人  Aliv丶Zz

   Dart中的抽象类:主要用于定义标准,子类可以继承抽象类,也可以时间实现抽象类的方法

  1. 抽象类通过 abstract 关键字来定义
  2. Dart中的抽象方法不能用 abstract 声明, Dart中没有方法体的方法统称为抽象方法
  3. 如果非抽象子类继承抽象类,则必须实现抽象类里的抽象方法
  4. 如果把抽象类当做接口实现的话,必须得实现抽象类里面自定义的所有属性和方法
  5. 抽象类不能被实例化只能被继承,继承他的子类可被实例化

1. 抽象类

abstract class Animal {
  eat(); //抽象方法
  //普通方法
  printInfo() {
    print("抽象类 中 普通方法");
  }
}
class Dog extends Animal {
  @override//继承抽象类,则必须实现抽象类里的抽象方法
  eat() {
    print('Dog  eat');
  }

  run() {
    print('Dog run');
  }
}

2. 接口

  首先,dart的接口没有interface关键字定义,且普通类或抽象类都可以作为接口被实现,同样使用implements关键字进行实现。
  因为抽象类可以定义抽象方法,普通类不可以, 但是如果接口的实现是普通类的话,会将普通类和抽象类中的属性和方法全部重写一遍,所以建议使用抽象类定义接口

abstract class A {
  String brithday;
  eat();
  run();
}
class Pig implements A {
  @override
  String brithday;

  @override
  eat() {
    // TODO: implement eat
    throw UnimplementedError();
  }

  @override
  run() {
    // TODO: implement run
    throw UnimplementedError();
  }
}

ps:extends抽象类 和 implements 的区别:
 1. 如果要复用抽象类里面的方法,并且要用抽象类方法约束子类的话。我们就用extends继承抽象类
  2. 如果是只是把抽象类当做标准的话我们就用implements实现抽象类

abstract class A {
  String brithday;
  eat();
  run();
}

abstract class B extends A {
  jump();
}

class Animal {
  String name;
  String age;

  Animal(this.name, this.age);

  void play() {}
}

单继承单实现:

//单继承单实现
class Dog extends Animal implements A {
  @override
  String brithday;

  Dog(String name, String age, String brithday) : super(name, age) {
    this.brithday = brithday;
  }
  //接口方法
  @override
  eat() {
    print('小狗 吃 🦴');
  }

  @override
  run() {
    print('小狗 running');
  }

  //继承方法
  @override
  void play() {
    print('继承方法');
  }
}

单继承多实现:

//单继承多实现
class Cat extends Animal implements A, B {
  @override
  String brithday;

  Cat(String name, String age) : super(name, age);

  @override
  eat() {
    // TODO: implement eat
    throw UnimplementedError();
  }

  @override
  jump() {
    // TODO: implement jump
    throw UnimplementedError();
  }

  @override
  run() {
    // TODO: implement run
    throw UnimplementedError();
  }
}

上一篇下一篇

猜你喜欢

热点阅读