和Java
一样, Dart
中也有接口, 但是和 Java
还是有区别的。
首先 , Dart
中的接口没有 interface
关键字, 而是普通类或者抽象类作为接口被实现(建议使用抽象类定义接口)。
同样使用 implements
关键字进行实现。
但是 Dart
中的接口有点奇怪,如果实现的类是普通类, 会将普通类和抽象中的属性和方法全部覆写一遍。
// Db.dart
abstract class Db {
// late 关键表示, dart 并不要求你对变量立即赋值, 只需要我们在初始化的时候 赋值即可,可以理解为懒加载的意思
late String uri;
add();
save();
del();
}
// MySql.dart
import 'Db.dart';
// implements 关键 是 实现的意思, Db 中如果有公用的方法,我们就需要使用 extends 继承,而Db类只是用来约束规范的类,并没有公用的方法,所以是用 implements 关键字。
class MySql implements Db {
@override
String uri;
MySql(String this.uri);
@override
add() {
print('mysql add');
}
@override
del() {
print('msql del');
}
@override
save() {
print('masql save');
}
}
// index.dart
import 'lib/MySql.dart';
void main() {
MySql mySql = new MySql('xxxxxx');
mySql.add();
mySql.del();
mySql.save();
}
实现多个接口
abstract class A {
printA();
}
abstract class B {
printB();
}
class C implements A,B{
@override
printA() {
print('A');
}
@override
printB() {
print("B");
}
}