隐式接口
每一个类都隐式地定义了一个接口并实现了该接口,这个接口包含所有这个类的实例成员以及这个类所实现的其它接口。如果想要创建一个 A 类支持调用 B 类的 API 且不想继承 B 类,则可以实现 B 类的接口。
扩展一个类
使用 extends 关键字来创建一个子类,并可使用 super 关键字引用一个父类:
重写类成员
子类可以重写父类的实例方法(包括 操作符)、 Getter 以及 Setter 方法。你可以使用 @override 注解来表示你重写了一个成员:
1 | class Television { |
noSuchMethod
如果调用了对象上不存在的方法或实例变量将会触发 noSuchMethod 方法,你可以重写 noSuchMethod 方法来追踪和记录这一行为:
只有下面其中一个条件成立时,你才能调用一个未实现的方法:
- 接收方是静态的 dynamic 类型。
- 接收方具有静态类型,定义了未实现的方法(抽象亦可),并且接收方的动态类型实现了 noSuchMethod 方法且具体的实现与 Object 中的不同。
扩展方法
扩展方法是向现有库添加功能的一种方式。跟kotlin的扩展方法效果一样。
1 | import 'string_apis.dart'; |
可调用类
通过实现类的 call() 方法,允许使用类似函数调用的方式来使用该类的实例。
1 | class WannabeFunction { |
抽象类
- 抽象类不能被实例化;
- 使用abstract修饰;
- 抽象方法不需要使用abstract,没有实现体即可,用分号结束;
Dart中,extends只能继承一个类。没有interface关键字,可以把抽象类当成接口使用。
1 | /// 抽象类 |
函数重写
1 | class Animal { |
使用Override修饰符,函数名字相同。