写点什么

dart 系列之:dart 类的扩展

作者:程序那些事
  • 2021 年 11 月 14 日
  • 本文字数:1215 字

    阅读完需:约 4 分钟

dart系列之:dart类的扩展

简介

虽然 dart 中的类只能有一个父类,也就是单继承的,但是 dart 提供了 mixin 语法来绕过这样限制。

今天,和大家一起来探讨一下 dart 类中的继承。

使用 extends

和 JAVA 一样,dart 中可以定义一个父类,然后使用 extends 来继承他,得到一个子类,如下所示:

class Student{
}class Boy extends Student{
}
复制代码

在子类中,可以使用 super 关键词来调用父类的方法。

抽象类和接口

dart 中除了继承普通类之外,还可以继承抽象类和实现接口。

抽象类是以 abstract 关键词修饰的 class,如下所示:

abstract class Student{    String getName();}
复制代码

抽象类中通常会有抽象方法,抽象方法需要在子类中进行实现。

当然抽象类中也可以有具体实现的方法,但是抽象类不可以被实例化,如果你想在抽象类中实例化对象,这可以使用之前我们提到的工厂构造函数。

和 java 不同的是,dart 中并没有 interface,他引入的是一个 Implicit interfaces 的概念。

对应每个对象来说,都隐式定义了一个包含类中所有方法和属性的接口。

一般来说,如果一个对象包含另外一个对象的结构和方法,但是他们之间的内容又是不一样的,则可以使用 implements 来隐式实现接口,如下所示:

class Student{
String name; String get _name => name;}
class Girl implements Student{ @override String name;
@override String get _name => "girls";}
复制代码

在 dart 中一个类可以 implements 多个接口。

上面的例子中,我们用到了 @override 注解,他表示子类对父类方法或者属性的重写。

在使用 @override 中,我们需要注意的是,子类对父类的实现会有下面几个限制:

  1. 子类的实现方法的返回值,必须和父类返回值相同,或者是父类返回值的子类。

  2. 子类的实现方法的参数,必须和父类方法参数相同,或者是父类参数的父类。

  3. 子类方法的参数必须和父类的参数个数相同。

mixins

虽然 dart 不支持多重继承,但是可以使用 mixin 来实现类似多重继承的功能。

要使用 mixins,可以使用关键字 with,如下所示:

class Boy extends Student with Person {  // ···  name='boy';  myName();}
复制代码

在 dart 中 mixin 是一个特殊的类,使用关键词 mixin 来描述,mixin 的类中,没有构造函数,如下所示:

mixin Person {  String name='';
void myName() { print('my name is:'+name); }}
复制代码

在 mixin 中可以定义有用的方法和属性,继承 mixin 的类可以重写对应的属性和方法,从而达到自定义的功能。

在 mixin 中我们也可以指定特定的类,也就是说只有特定的类才能够使用 mixin,则可以使用关键词 on,如下所示:

mixin Person on Boy{  String name='';
void myName() { print('my name is:'+name); }}

复制代码

总结

以上就是 dart 中继承的使用,dart 中还可以继承方法,这是 dart 的高级应用,我们会在后续的文章中进行介绍,敬请期待。

本文已收录于 http://www.flydean.com/07-dart-extend/

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

发布于: 2021 年 11 月 14 日阅读数: 9
用户头像

关注公众号:程序那些事,更多精彩等着你! 2020.06.07 加入

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧,尽在公众号:程序那些事!

评论

发布
暂无评论
dart系列之:dart类的扩展