携手创造,共同成长!这是我参加「日新方案 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();
往期精彩引荐
如果读者觉得文章还可以,不防一键三连:关注➕点赞➕保藏