dart之extends,with,implements
2021-02-09 本文已影响0人
只会ctrl_c_v
描述:
- 继承(关键字 extends);
- 混入 mixins (关键字 with);
- 实现(关键字 implements)
特性:这三种关系可以同时存在,但是有前后顺序:
extends > with > implements
准备:DemoA 类 DemoB 类 DemoC 类
class DemoA {
String aStr;
DemoA(this.aStr);
void aMethod() {
print("打印 DemoA类的字符串: ${this.aStr}");
}
otherMehod() {
print("DemoA类 'otherMehod' 方法打印");
}
}
class DemoB {
String bStr = "默认DemoB 字符串b";
void bMethod() {
print("打印 DemoB类的字符串: ${this.bStr}");
}
}
class DemoC {
String cStr;
void cMethod() {
print("打印 DemoC类的字符串: ${this.cStr}");
}
}
继承(extends):
// 继承(关键字 extends)
class DemoEx extends DemoA {
DemoEx(String aStr) : super(aStr);
extendsMethod() {
print("自己的方法");
}
}
void main(List<String> args) {
DemoEx ex = DemoEx("继承A");
ex.extendsMethod();
ex.aMethod();
ex.otherMehod();
}
打印结果:
image.png
混入(with):
注意:
- 作为mixins的类不能有构造函数
- 一个类可以mixins多个mixins类
class DemoWh with DemoB, DemoC {
withMethod() {
print("自己的方法");
}
}
void main(List<String> args) {
DemoWh wh = DemoWh();
wh.withMethod();
wh.bMethod();
wh.cMethod();
}
打印结果:
image.png
实现(implements):
class DemoIm implements DemoC {
@override
String cStr = "DemoIm -> cStr";
@override
void cMethod() {
print("DemoIm implements DemoC 和字符串cStr:" + this.cStr);
}
}
void main(List<String> args) {
DemoIm im = DemoIm();
im.cMethod();
}
打印结果:
image.png
混合使用(注意顺序 extends > with > implements )
class DemoAll extends DemoA with DemoB implements DemoC {
@override
String cStr = "123";
DemoAll(String aStr) : super(aStr);
@override
void cMethod() {
print("DemoAll implements DemoC 和字符串cStr:" + this.cStr);
}
}
void main(List<String> args) {
DemoAll all = DemoAll("混合所有");
all.aMethod();
all.bMethod();
all.cMethod();
}
打印结果:
image.png