Dart 中的 extends / with / implements

extends

extends 表示继承。Dart 中的继承和 Java 一样。

  • 使用关键字 extends 继承一个类
  • 子类继承父类可见的属性和方法,不会继承父类的构造方法
  • 子类可以覆写父类的方法,方法上要加 @override
  • 子类可以调用父类的方法,用 super 关键字
  • 单继承,多态性

with

with 表示 mixins (混入),就是在类中混入其他功能。使用 mixins 可以实现类似于多继承的功能。mixins 和接口完全不一样,是一个全新的特性。

  • mixins 只能继承 Object
  • mixins 没有构造函数
  • mixins 和接口实现一样可以在 with 后面使用多个 mixins,用逗号隔开
class Parent {
  String name;

  methodParent() {
    print("methodParent");
  }
}

class A {
  methodA() {
    print("methodA");
  }
}

class B {
  methodB() {
    print("methodB");
  }
}

class C extends Parent with A, B {}

main() {
  C c = C();
  c.methodParent();
  c.methodA();
  c.methodB();
}

implements

implements 表示接口实现。Dart 不使用 interface 关键字,但是 Dart 中每个类都是一个隐性的接口,这个隐性的接口里面包含了类的所有成员变量和方法。
如果一个类被当做接口来用,那么实现这个接口的类必须实现接口所有的成员变量和方法。

abstract class A {
  String nameA;

  methodA();
}

abstract class B {
  String nameB;

  methodB();
}

class C implements A, B {
  @override
  String nameA;

  @override
  String nameB;

  @override
  methodA() {
    print("A");
  }

  @override
  methodB() {
    print("B");
  }
}

同时使用

当同时使用这三者时,书写的顺序是 extends > with > implements

class C extends Parent with A, B implements AA, BB {}

你可能感兴趣的:(Dart 中的 extends / with / implements)