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 {}
网友评论