Dart中的隐式接口

先看一下文档的描述:
每个类都隐式地定义一个接口,该接口包含类的所有实例成员及其实现的任何接口。如果您想创建一个类A,它支持类B的API而不继承B的实现,那么类A应该实现B接口 。
如何去理解,直接上代码来解释吧。

//定义一个父类Vehicle
class Vehicle{
  num speed  = 0  ;
  Vehicle(){
    print("super Constructor") ;
  }
  Vehicle.get(){
    print("super Run") ;
  }
  Vehicle.create(){
    print("super create") ;
  }
  void run(){
    print("vehicle run") ;
  }
  void printSpeed(){
    print("spped = > $spped") ;
  }
}

分析一下这个类
成员变量:
1.speed
方法:
1.run()
2.printSpeed()
我们再回顾一下文档上所说:“每个类都隐式地定义一个接口,该接口包含类的所有实例成员及其实现的任何接口”。
意思就是说:当我们定义了一个类的时候,同时就会产生一个和此类同名的接口,而且此接口包含了我们定义的类中所有的方法,以及它的成员变量。
怎么样去理解呢?
上面的Vehicle类中,我们定义了两个方法,和一个成员变量。假如我们把方法和成员变量都统称为成员的话。那么上面的Vehicle中一共有3个成员。那么Vehicle隐式生成的接口中,就有三个成员需要我们去实现。
好了,我们看一下我们的实现:

class Benz implements Vehicle{
  @override
  void run() {
    print("Benz running");
  }
  @override
  void printspped() {
    print("benz spped = $spped") ;
  }
  //覆盖(实现)成员变量
  @override
  num spped;
}

我们看到,我们没有定义Vehicle接口,我们只是定义了Vehicle类,我们就可以去实现Vehicle接口。说明Dart默认为我们的类,生成一个同名接口。我们可以去实现。而且此接口中所有的成员(包括变量和方法)都需要我们去Override一次。否则就会报错。

总结

1.Dart中也有接口,但是不能像Java中那样使用interface来定义
2.Dart中的类会生成一套相同成员的接口,简单理解:类就是接口。
3.实现一个接口,同样需要我们用implements ,但是需要我们覆盖一遍接口中所有的成员。
4.我们建议可以使用抽象类来定义接口。

你可能感兴趣的:(Dart中的隐式接口)