1 前言
上一篇文章我们学习了Dart面向对象的一些基础内容,包括类与对象的声明,构造函数和初始化列表。今天我们将进一步深入了解Dart面向对象的内容。
继承
Dart支持单继承,使用extends关键字继承父类,通过super关键字可以调用父类的方法。
main(){
var dog = Dog();
dog.eat(); \\ can eat
dog.run(); \\ dog can run
}
class Animal {
void eat() {
print("can eat");
}
void run() {
print("can run");
}
}
class Dog extends Animal {
void eat() {
super.eat();
}
void run() {
print("dog can run");
}
}
抽象类
使用 abstract 修饰符来定义 抽象类 — 抽象类不能实例化。 抽象类通常用来定义接口,以及部分实现。
main(){
var bird = Bird();
bird.eat();
bird.fly();
}
abstract class Animal {
void eat() {
print("can eat");
}
void fly();
}
class Bird extends Animal {
@override
void fly() {
print("bird can fly");
}
}
隐式接口
Dart中的接口与其他语言的接口都不相同,Dart中每个类都隐式的定义了一个接口,接口包含了该类所有的实例成员及其实现的接口,但是不包含构造函数。 如果要创建一个 A 类,A 要支持 B 类的 API ,但是不需要继承 B 的实现, 那么可以通过 A 实现 B 的接口。
main(){
var man = Man("Joe");
man.printName(); \\ Joe
man.walk(); \\Joe can walk
}
class people {
String _name;
void walk() {
print("can walk");
}
printName() {
print(this._name);
}
}
class Man implements people {
@override
String _name;
Man(this._name);
@override
printName() {
print(this._name);
}
@override
void walk() {
print("${this._name} can walk");
}
}
Mixin
Mixin 是复用类代码的一种途径, 复用的类可以在不同层级,之间可以不存在继承关系。通过创建一个继承自 Object 且没有构造函数的类,with 后面跟一个或多个混入的名称来 实现 一个 Mixin 。
void main() {
Car car = new Car();
car.work(); //Work with electric
}
abstract class Engine {
void work();
}
class ElectricEngine implements Engine {
@override
void work() {
print("Work with electric");
}
}
class OilEngine implements Engine {
@override
void work() {
print("Work with oil");
}
}
class Tyre {
String name;
void run() { }
}
class Car = Tyre with ElectricEngine;
最后
今天主要简单介绍了Dart面向对象的继承,抽象类,隐式接口和Mixin,如果有问题,有问必回。点赞就是最大的支持,更多精彩文章和相关学习资料可以关注微信公众号QStack,追寻最纯粹的技术,享受编程的快乐。