美文网首页
【Flutter】Dart中的抽象类和接口

【Flutter】Dart中的抽象类和接口

作者: 俊而不逊 | 来源:发表于2021-11-03 13:38 被阅读0次
    Flutter.jpeg

    📝【Flutter】学习养成记,【程序员必备小知识】

    📔 今日小知识——【Flutter】Dart中的抽象类和接口!

    1. 写在前面

    上篇文章中介绍了Dart中的继承,那么现在就继续来学习 Dart中的抽象类接口吧。

    【Flutter】苹果Mac电脑配置flutter开发环境

    【Flutter】 Android Studio 安装第三方模拟器—网易MuMu

    【Flutter】项目运行报错Failed to find Build Tools revision 29.0.2

    【Flutter】flutter doctor 报错Android license status unknown. Run `flutter doctor --android-licenses‘

    【Flutter】如何新建项目,运行你的第一个 flutter 工程项目

    【Flutter】Dart中的var、final 和 const基本使用

    【Flutter】Dart数据类型之num

    【Flutter】Dart数据类型之String

    【Flutter】Dart的数据类型list&Map(数组和字典)

    【Flutter】Dart的方法与箭头函数

    【Flutter】Dart的方法中的可选参数、方法作为参数传递

    【Flutter】Dart中的匿名函数、闭包

    【Flutter】Dart中的类和对象

    【Flutter】Dart中的构造函数

    【Flutter】Dart的工厂构造方法&单例对象&初始化列表

    【Flutter】Dart的类方法和对象操作符

    【Flutter】Dart中的继承

    2. 抽象类

    • 抽象类

    抽象类,不能被实例化,使用 abstract 修饰

    • 举例说明抽象类

    2.1 抽象类定义

    //抽象类测试
    abstractTest(){
      AbatractClass ab =  AbatractClass();
    }
    //抽象类
    abstract class AbatractClass{
    
    }
    

    这里定义了一个抽象类AbatractClass,实例化的话会报错的,如下:

    报错信息

    2.2 抽象方法

    • 抽象方法

    这里定义了一个方法,没有实现方法,这就是一个抽象方法

    abstract class AbatractClass{
      //抽象方法
      int sum(int a,int b);
    }
    

    抽象方法一定是放在抽象类里面,不然的话也是会报错的。

    报错信息
    • 抽象类的子类
      定义一个抽象类的子类,那么子类就必须实现父类的抽象方法,如下:
    void main() {
      abstractTest();
    }
    abstractTest(){
      AbstractClass ab =  SubClass();
      ab.sum(10, 20);
    }
    class SubClass extends AbstractClass{
      @override
      int sum(int a, int b) {
        print(a + b);
        return a + b;
      }
      
    }
    abstract class AbstractClass{
      //抽象方法
      int sum(int a,int b);
    }
    
    • 代码运行结果
    代码运行结果

    抽象类的好处是什么呢?

    如上面例子中,多态的情况下,可以直接使用父类的对象调用子类的方法,这里就不需要判断是否是SubClass了,直接就可以调用SubClass的方法了,这类似于 iOS 中的协议了,在 dart 中是单继承,这就没有办法继承多个抽象类了。

    2.3 接口

    但是可以使用implements来实现,如下:

    void main() {
      abstractTest();
    }
    abstractTest(){
      SubClass ab =  SubClass();
      ab.sum(10, 20);
      ab.sub(20, 5);
      ab.add(20, 20);
    }
    class SubClass implements AbstractClass,AbstractClass1,AbstractClass2{
      @override
      int sum(int a, int b) {
        print(a + b);
        return a + b;
      }
    
      @override
      String? name;
    
      @override
      int add(int a, int b) {
        print(a + b);
        return a + b;
      }
    
      @override
      int sub(int a, int b) {
        print(a - b);
        return a - b;
      }
      
    }
    abstract class AbstractClass{
      String? name;
      //抽象方法
      int sum(int a,int b);
    }
    abstract class AbstractClass1{
      //抽象方法
      int add(int a,int b);
    }
    abstract class AbstractClass2{
      //抽象方法
      int sub(int a,int b);
    }
    
    • 运行结果
    运行结果

    使用implements就类似于 OC 中的协议,我们这里称为接口可以实现多继承。对于继承的抽象类的抽象方法方法,都必须实现,包括属性都得重写。

    3. 写在后面

    关注我,更多内容持续输出

    🌹 喜欢就点个赞吧👍🌹

    🌹 觉得有收获的,可以来一波 收藏+关注,以免你下次找不到我😁🌹

    🌹欢迎大家留言交流,批评指正,转发请注明出处,谢谢支持!🌹

    相关文章

      网友评论

          本文标题:【Flutter】Dart中的抽象类和接口

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