Skip to content

普通类的继承

dart
class Phone {
  int number;
  Phone(this.number);
  void powerOn() {}

  void shutDown() {
    print('test');
  }

  void showNumber() {
    print('the number is $number');
  }
}

class Android extends Phone {
  Android(super.number);

  @override
  void powerOn() {
    super.powerOn();
    print('安卓开机');
  }

  @override
  void shutDown() {
    super.shutDown();
    print('安卓关机');
  }

  @override
  void noSuchMethod(Invocation invocation) {
    print('noSuchMethod 被重写');
  }
}

dynamic p = Android(123);
p.powerOn();
p.showNumber();
p.haha();
p.shutDown();

抽象类的继承

虽然抽象类中的方法可以写具体的逻辑,并且在子类继承时通过super调用抽象父类的具体实现方法,也可以通过子类的实例调用抽象父类的具体实现方法。

但根据其他开发语言形成的通用规范,抽象类中成员必须都是抽象的,抽象方法的具体逻辑交给子类继承或接口实现后进行重写

dart
abstract class Phone {
  int number;
  Phone(this.number);
  void powerOn();

  void shutDown() {
    print('test');
  }

  void showNumber() {
    print('the number is $number');
  }
}

class Android extends Phone {
  Android(super.number);

  @override
  void powerOn() {
    super.powerOn(); // IDE报错,抽象方法不能被调用
    print('安卓开机');
  }

  @override
  void shutDown() {
    super.shutDown(); // 子类中通过super调用抽象父类中已具体实现的方法
    print('安卓关机');
  }

  @override
  void noSuchMethod(Invocation invocation) {
    print('noSuchMethod 被重写');
  }
}

var p = Android(123);
p.powerOn();
p.showNumber(); // 子类实例调用抽象父类中已具体实现的方法
p.haha();
p.shutDown();

MIT License