Dart语言的接口替代品
Posted 极客起源
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dart语言的接口替代品相关的知识,希望对你有一定的参考价值。
在Dart语言中并没有接口的概念,但接口的功能需要其他功能来弥补,这就是抽象类。接口的作用是用于制定规范。也就是说,在接口中定义的方法,都必须在实现接口的类中实现。而且接口本身并不能实例化。
Dart中的抽象类与接口类似,但也有一定的差异。它们的区别、联系以及主要用途如下:
• Dart抽象类允许定义没有方法体的方法,这一点与接口一样。不过也允许定义包含方法体的普通方法。
• 如果在Dart抽象类中定义没有方法体的方法,那么抽象类的子类必须实现这个方法,否则子类也出现编译错误,除法将子类声明为抽象类,否则代码无法编译通过。
• 抽象类需要使用abstract关键字声明,但抽象不需要使用任何特殊关键字声明,只要在抽象类中定义没有方法体的方法,就是抽象方法。
• 抽象类与接口一样,不能实例化。
• 抽象类中有方法体的方法就是普通方法,在抽象类的子类中并不要求覆盖这些普通方法,但要想使用普通方法,必须用普通类继承抽象类,才可以实例化,并调用这些普通方法。
• 通常可以用抽象类实现多态的效果。例如,两个类都实现了同一个抽象类,并实现了其中的抽象方法。这时定义了两个变量,类型都是抽象类。然后实例化这两个类,将实例分别赋给这两个变量。尽管这两个变量中包含了同样的方法,但由于这两个类中实现方法的代码不同,所以通过这两个变量调用同名方法的效果也不同,这就叫多态。
下面给出一个实际的案例,用来演示如何编写抽象类和抽象方法,以及如何通过抽象类实现多态。
// 定义抽象类
abstract class ParentClass{
// 抽象方法,必须在子类中实现
void doSomething();
// 普通方法,必须要在子类中实现
void process() {
print("process");
}
}
// 继承抽象类ParentClass的子类
class ChildClass1 extendsParentClass {
// 实现doSomething抽象方法
void doSomething() {
print("doSomething1");
}
}
// 继承抽象类ParentClass 的子类
class ChildClass2 extendsParentClass {
// 实现doSomething抽象方法
void doSomething() {
print("doSomething2");
}
}
void main() {
// 多态的实现
ParentClass pc1 = ChildClass1();
ParentClass pc2 = ChildClass2();
// 调用抽象方法
pc1.doSomething();
pc2.doSomething();
// 调用普通方法
pc1.process();
pc2.process();
}
运行结构如下图所示
Dart视频课程(学习跨平台开发框架Flutter的基础)
李宁老师全部视频课程
以上是关于Dart语言的接口替代品的主要内容,如果未能解决你的问题,请参考以下文章
flutter解决 dart:html 只支持 flutter_web 其他平台编译报错 Avoid using web-only libraries outside Flutter web(代码片段