flutter中接口、mixins以及抽象类的异同

以下所有内容均为个人观点,转载请注明出处<简书--小蜗牛吱呀之悠悠 >,谢谢!

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比较像
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容