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语言的接口替代品的主要内容,如果未能解决你的问题,请参考以下文章

Dart/Flutter 替代 PHP 调整裁剪图像大小?

Go断后,Dart冲前,Google的野心

Dart语言进阶语法

flutter解决 dart:html 只支持 flutter_web 其他平台编译报错 Avoid using web-only libraries outside Flutter web(代码片段

Dart基础

Dart常用核心知识