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

2021-11-03  本文已影响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. 写在后面

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

🌹 喜欢就点个赞吧👍🌹

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

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

上一篇下一篇

猜你喜欢

热点阅读