携手创造,共同成长!这是我参加「日新方案 8 月更文应战」的第9天,点击检查活动详情
引荐运用线上编辑器 dartpad.cn 进行学习,测验~
之前的系列文章咱们已经初步涉猎了承继和多态。本文,咱们来聊聊它们。
承继
Dart 中的承继是单承继,也便是一个类只能有一个直接的父类。默认承继父类 Object 类。运用 extends 关键字,子类会承继父类的特点和办法。
void main() {
Child child = new Child();
child.name = 'Jimmy';
child.sayHi(); // Jimmy say Hi.
}
class Father {
String name = ''; // 特点 - 名称
// 办法名
void sayHi() {
print(this.name + ' say Hi.');
}
}
class Child extends Father {
double height = 0.0;
}
混入(Mixin)的语法,允许子类承继父类时混入其他的类。后边再讲解。
Child 承继了 Father 类的办法 sayHi(),那么咱们子类中能否运用这个办法呢?答案是能的。这里就涉及到办法重写了。咱们在子类中新建一个父类同名的办法 sayHi() 即可,如下:
class Child extends Father {
double height = 0.0;
void sayHi() {
print('Child say Hi');
}
// @override
// void sayHi() {
// print('Child say Hi');
// }
}
再次运行代码 child.sayHi(); 就会输出 Child say Hi 的案牍了。
你可认为办法重写添加上
@override的关键字,引荐加上关键字的写法,让人知道这个办法在父类上存在的。
多态
多态是同一种行为具有不同表现形式或形状。
长处:
- 消除类型之间的耦合联系
- 可代替性
- 可扩充性
- 接口性
- 灵活性
- 简化性
存在的三个必要条件:
- 承继
- 重写
- 父类引用指向子类目标
void main() {
Animal dog = new Dog();
dog.eat(); // Dog eat meat.
Animal sheep = new Sheep();
sheep.eat(); // Sheep eat grass.
}
class Animal {
void eat() {
print('Animal class eat.');
}
}
class Dog extends Animal {
@override
void eat() {
print('Dog eat meat.');
}
}
class Sheep extends Animal {
@override
void eat() {
print('Sheep eat grass.');
}
}
比如上面的演示。Dog 和 Sheep 都承继于 Animal,两者都重写了 Animal 中的 eat() 方。上面声明的两个目标实例都是父类的 Animal,可是实际指向的都是子类的一个目标。
Animal dog = new Dog();
Animal sheep = new Sheep();
往期精彩引荐
如果读者觉得文章还可以,不防一键三连:关注➕点赞➕保藏
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
