Java 一样, Dart中也有接口, 但是和 Java还是有区别的。

首先 , Dart 中的接口没有 interface 关键字, 而是普通类或者抽象类作为接口被实现(建议使用抽象类定义接口)。

同样使用 implements 关键字进行实现。

但是 Dart 中的接口有点奇怪,如果实现的类是普通类, 会将普通类和抽象中的属性和方法全部覆写一遍。

  1. // Db.dart
  2. abstract class Db {
  3. // late 关键表示, dart 并不要求你对变量立即赋值, 只需要我们在初始化的时候 赋值即可,可以理解为懒加载的意思
  4. late String uri;
  5. add();
  6. save();
  7. del();
  8. }
  9. // MySql.dart
  10. import 'Db.dart';
  11. // implements 关键 是 实现的意思, Db 中如果有公用的方法,我们就需要使用 extends 继承,而Db类只是用来约束规范的类,并没有公用的方法,所以是用 implements 关键字。
  12. class MySql implements Db {
  13. @override
  14. String uri;
  15. MySql(String this.uri);
  16. @override
  17. add() {
  18. print('mysql add');
  19. }
  20. @override
  21. del() {
  22. print('msql del');
  23. }
  24. @override
  25. save() {
  26. print('masql save');
  27. }
  28. }
  29. // index.dart
  30. import 'lib/MySql.dart';
  31. void main() {
  32. MySql mySql = new MySql('xxxxxx');
  33. mySql.add();
  34. mySql.del();
  35. mySql.save();
  36. }

实现多个接口

  1. abstract class A {
  2. printA();
  3. }
  4. abstract class B {
  5. printB();
  6. }
  7. class C implements A,B{
  8. @override
  9. printA() {
  10. print('A');
  11. }
  12. @override
  13. printB() {
  14. print("B");
  15. }
  16. }