Dart 中的接口使用
一、Dart 接口的特点
Dart 中的接口与 Java 有所不同。在 Dart 中:
- 没有
interface
关键字:Dart 中没有专门的interface
关键字来定义接口,而是使用普通类或抽象类来作为接口。 - 使用
implements
关键字:通过implements
关键字来实现接口。 - 实现普通类时需覆写所有方法和属性:如果实现的类是普通类,那么需要覆写普通类和抽象类中的所有属性和方法。
- 建议使用抽象类定义接口:由于抽象类可以定义抽象方法,而普通类不能,因此一般建议使用抽象类来定义接口,类似于 Java 中的接口。
二、代码示例解析
(一)定义抽象类作为接口
abstract class Db{ //当做接口 接口:就是约定 、规范
late String uri; //数据库的链接地址
add(String data);
save();
delete();
}
- 这里定义了一个抽象类
Db
,它包含一个延迟初始化的属性uri
和三个抽象方法:add(String data)
、save()
和delete()
。 - 抽象类
Db
起到了接口的作用,规定了实现它的类必须实现这些方法和属性。
(二)实现接口的类
1. Mysql 类
class Mysql implements Db{
String uri;
Mysql(this.uri);
add(data) {
// TODO: implement add
print('这是mysql的add方法'+data);
}
delete() {
// TODO: implement delete
return null;
}
save() {
// TODO: implement save
return null;
}
remove(){
}
}
Mysql
类实现了Db
接口。- 它必须覆写
Db
中的所有属性和方法,包括uri
、add(String data)
、save()
和delete()
。 - 在
add(data)
方法中,输出了“这是mysql的add方法”加上传入的数据。 delete()
和save()
方法目前只是返回null
,可以根据实际需求实现具体的逻辑。Mysql
类还额外定义了一个remove()
方法,这是它自己的扩展方法,不属于Db
接口。
2. MsSql 类
class MsSql implements Db{
late String uri;
add(String data) {
print('这是mssql的add方法'+data);
}
delete() {
// TODO: implement delete
return null;
}
save() {
// TODO: implement save
return null;
}
}
MsSql
类也实现了Db
接口。- 它同样覆写了
Db
中的所有属性和方法。 - 在
add(String data)
方法中,输出了“这是mssql的add方法”加上传入的数据。 delete()
和save()
方法目前也是返回null
,等待具体实现。
(三)主函数中的使用
main() {
Mysql mysql=new Mysql('xxxxxx');
mysql.add('1243214');
}
- 在
main()
函数中,创建了一个Mysql
类的对象mysql
,并传入了一个数据库链接地址'xxxxxx'
。 - 调用了
mysql.add('1243214')
,输出了“这是mysql的add方法1243214”。
三、总结
通过这个例子,我们可以看到 Dart 中接口的使用方式。虽然 Dart 没有专门的 interface
关键字,但通过抽象类和 implements
关键字,可以实现类似 Java 中接口的功能。在实际开发中,建议使用抽象类来定义接口,这样可以更清晰地规定实现类需要遵循的规范。同时,实现类需要覆写接口中的所有属性和方法,确保接口的完整性和一致性。