美文网首页
flutter中接口、mixins以及抽象类的异同

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

作者: 小蜗牛吱呀之悠悠 | 来源:发表于2020-12-09 17:50 被阅读0次

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

    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比较像

    相关文章

      网友评论

          本文标题:flutter中接口、mixins以及抽象类的异同

          本文链接:https://www.haomeiwen.com/subject/wkohgktx.html