先看一下文档的描述:
每个类都隐式地定义一个接口,该接口包含类的所有实例成员及其实现的任何接口。如果您想创建一个类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.我们建议可以使用抽象类来定义接口。









网友评论