以下所有内容均为个人观点,转载请注明出处<简书--小蜗牛吱呀之悠悠 >,谢谢!
flutter中的接口、mixins都可以给类增加能力,那么这两者有什么异同呢?
首先,先简单了解一下接口、mixins以及抽象类的能力
接口:通过implements关键字,让实现接口的类必须重写接口中的所有方法。
mixins: 通过mixins关键字,让实现mixins的类能够重写mixins中的方法。
抽象类: 通过abstract关键字,让类成为抽象类,可以让本类没有方法体,也可以有方法体。
一、从功能来看:
1、接口是必须重写所有方法,否则编译不通过,如下
class Leader {
showLeader(){
print('这是一位领导');
}
}
class PersonalForSomebody implements Leader {
@override
showLeader() {
// TODO: implement showLeader
throw UnimplementedError();
}
}
2、mixins可以只重写一部分的方法
class StudyClass {
void studyMethod(){
}
//可以不被重写
void testMethod(){
}
}
class Test extends Person with StudyClass {
Test(String name, int age) : super(name, age);
@override
void studyMethod() {
// TODO: implement studyMethod
super.studyMethod();
}
}
3、无论是接口还是mixins,只要是提供接口或mixins的类是抽象类,所有方法必须被实现
二、super关键字
1、从上述代码可以看出,当方法被重写时,接口无法使用super关键字,mixins可以使用super调用父类的方法
2、由于接口必须重写所有方法,因此实例化以后,可以使用所有接口的方法;但mixins在实例化后,只能使用已经重写的方法
综上,接口、mixins有以下异同:
- 接口的所有方法需要被重写,mixins的方法可以只重写一部分(抽象类的需要实现全部方法),没重写的那部分实例化后无法调用
- 接口的方法被重写时,不能使用super来访问被重写的方法,而mixins可以
- 接口跟iOS中用require修饰的协议方法比较像,mixins则和category比较像
网友评论