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

1. 写在前面

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

Flutter

【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. 写在后面

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

🌹 喜欢就点个赞吧👍🌹

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡卡西Sensei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值