前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Dart语言的接口替代品

Dart语言的接口替代品

作者头像
蒙娜丽宁
发布2020-04-13 11:57:34
4420
发布2020-04-13 11:57:34
举报
文章被收录于专栏:极客起源极客起源

在Dart语言中并没有接口的概念,但接口的功能需要其他功能来弥补,这就是抽象类。接口的作用是用于制定规范。也就是说,在接口中定义的方法,都必须在实现接口的类中实现。而且接口本身并不能实例化。

Dart中的抽象类与接口类似,但也有一定的差异。它们的区别、联系以及主要用途如下:

• Dart抽象类允许定义没有方法体的方法,这一点与接口一样。不过也允许定义包含方法体的普通方法。

• 如果在Dart抽象类中定义没有方法体的方法,那么抽象类的子类必须实现这个方法,否则子类也出现编译错误,除法将子类声明为抽象类,否则代码无法编译通过。

• 抽象类需要使用abstract关键字声明,但抽象不需要使用任何特殊关键字声明,只要在抽象类中定义没有方法体的方法,就是抽象方法。

• 抽象类与接口一样,不能实例化。

• 抽象类中有方法体的方法就是普通方法,在抽象类的子类中并不要求覆盖这些普通方法,但要想使用普通方法,必须用普通类继承抽象类,才可以实例化,并调用这些普通方法。

• 通常可以用抽象类实现多态的效果。例如,两个类都实现了同一个抽象类,并实现了其中的抽象方法。这时定义了两个变量,类型都是抽象类。然后实例化这两个类,将实例分别赋给这两个变量。尽管这两个变量中包含了同样的方法,但由于这两个类中实现方法的代码不同,所以通过这两个变量调用同名方法的效果也不同,这就叫多态。

下面给出一个实际的案例,用来演示如何编写抽象类和抽象方法,以及如何通过抽象类实现多态。

代码语言:javascript
复制
// 定义抽象类
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();}

运行结构如下图所示

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 极客起源 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档