【Flutter】dart class、 mixin和extends、implements、with那些事

这篇具有很好参考价值的文章主要介绍了【Flutter】dart class、 mixin和extends、implements、with那些事。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文档基于dart 3.2.3, 于dart > 3.0 有效。本篇起源于大池子面试问题:extends implements、with 有啥区别。关于此问题,我想从class 和 mixin 开始,

1、class、mixin 常用修饰符

  • abstract
  • base
  • final
  • interface
  • sealed
  • mixin

2、abstract

2.1 抽象类的定义

abstract class Veichle {
  String egProps;
  void moveForward(int meters);

  Veichle(this.egProps) {
    print("Veichle Constructor $egProps");
  }
}

根据我们对OOP的理解,抽象类中的方法都是抽象方法,那么dart抽象类有如下特点

  • 抽象类是可以包含属性构造方法的。
  • 关于抽象类的属性,JJ的理解是声明了一个egPropsset抽象方法,由子类去负责实现。

2.2 extends

2.2.1 示例代码
void main(List<String> args) {
  Veichle veichle = Passat("帕萨特");
  veichle.moveForward(20);
}

abstract class Veichle {
  String brand;
  void moveForward(int meters);

  Veichle(this.brand) {
    print("Veichle Constructor $brand");
  }
}

class Passat extends Veichle {
  Passat(super.egProps) {
    print("Passt Constructor ${this.brand}");
  }

  
  void moveForward(int meters) {
    print("$brand has runed $meters");
  }
}

2.2.2 输出结果
Veichle Constructor 帕萨特
Passt Constructor 帕萨特
帕萨特 has runed 20
2.2.3 总结
  • class是可以extends(继承)抽象类的
  • 子类继承如果抽象类包含抽象方法(包含构造函数),extends是要全量实现抽象方法的。
  • 若抽象类包含构造方法, 子类实例对象构造的过程,是抽象类构造函数,子类构造函数

2.3 implements

2.3.1 事例代码

void main(List<String> args) {
  Veichle veichleAudi = Audi();
  veichleAudi.moveForward(20);
}
class Audi implements Veichle {
  
  String brand = "奥迪";

  
  void moveForward(int meters) {
    print("$brand has runed $meters m");
  }
}

因为implements 常用于对于接口(interface)的实现,故此处只实现了方法的重写。

  • @override 重载了抽象方法(包含属性的get方法)

2.3.2 输出结果

奥迪 has runed 20 m

2.3.3 小结

  • implements关键字只@override(重写)抽象方法(包含属性的set方法)
  • 因为不存在继承关系,故Audi实例话化程,与抽象类的默认构造函无关。

2.3 with

2.3.1 事例代码

void main(List<String> args) {
  Benz benz = Benz("奔驰");
  benz.moveForward(20);
}
abstract mixin class NonConstruction {
  void moveForward(int meters);
}
class Benz with NonConstruction {
  String brand;
  Benz(this.brand);
  
  void moveForward(int meters) {
    print("不塞车的$brand has runed $meters");
  }
}

2.3.2 输出结果

不塞车的奔驰 has runed 20

2.3.4 小结

值得注意的是,在使用with 关键字时(dart版本在开头已经强调,此处不再赘述),需要声明为mixin.文章来源地址https://www.toymoban.com/news/detail-809465.html

  • mixin混入的抽象类,是不能包含构造方法,时可以包含属性的。
  • mixin的类,是不能使用多态的,比如上述的Benz构造出的对象只是Benz类型。

3、base


TODO

  • 1.baseinterfacefinal之一sealed,描述对该类进行子类型化的其他库的限制。
  • 2. mixin

到了这里,关于【Flutter】dart class、 mixin和extends、implements、with那些事的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flutter系列文章-Flutter环境搭建和Dart基础

    Flutter是Google推出的一个开源的、高性能的移动应用开发框架,可以用一套代码库开发Android和iOS应用。Dart则是Flutter所使用的编程语言。让我们来看看如何搭建Flutter开发环境,并了解Dart语言的基础知识。 1. 安装Flutter SDK 首先,访问Flutter官网下载Flutter SDK。选择适合你操作系统

    2024年02月15日
    浏览(46)
  • Flutter学习2 - Dart

    Dart语言特点: Dart 2.0 开始便是强类型语言,而且是静态类型的(可以类比Java,C#等) 强类型语言的优点:所有类型的检查必须在编译的时候完成 前端开发的 js 语言是弱类型的语言 强类型的语言需要在定义的时候指定类型,如果不指定,编译器也可以在赋值的时候推断出变

    2024年02月21日
    浏览(46)
  • 【Flutter】Dio 强大的Dart/Flutter HTTP客户端

    Dio是一个强大的Dart/Flutter HTTP客户端,支持全局配置、拦截器、FormData、请求取消、文件上传/下载、超时等功能。 首先,

    2024年02月11日
    浏览(46)
  • 无涯教程-Flutter - Dart简介

    Dart是一种开源通用编程语言,它最初是由Google开发的, Dart是一种具有C样式语法的面向对象的语言,它支持诸如接口,类之类的编程概念,与其他编程语言不同,Dart不支持数组, Dart集合可用于复制数据结构,例如数组,泛型和可选类型。 以下代码显示了一个简单的Dart程序

    2024年02月10日
    浏览(53)
  • Flutter Dart语言(05)异步

    该系列教程主要是为有一定语言基础 C/C++的程序员,快速学习一门新语言所采用的方法,属于在C/C++基础上扩展新语言的模式。 在Dart语言中,虽然没有像其他语言(如Java、C++、Python)中的传统多线程概念,但它采用了异步(asynchronous)编程模型来处理并发任务。Dart使用asy

    2024年02月14日
    浏览(39)
  • 【Flutter】Dart/Flutter SDK如何降低版本、回退到指定版本

    因为dart3.0以后不再支持 no-sound-null-safety;但是有些项目不得以切换到dart3.0以前继续使用运行项目 方法1: 通过 命令,将flutter降级为当前通道的上一个活动版本; 如果没有存在老版本则会提示 flutter downgrade There is no previously recorded version for channel “stable”. 这样的话则可以通

    2024年02月16日
    浏览(37)
  • Flutter Dart语言(04)库操作

    该系列教程主要是为有一定语言基础 C/C++的程序员,快速学习一门新语言所采用的方法,属于在C/C++基础上扩展新语言的模式。 引入代码如下所示: 一般从官方网站:Page 1 | Top packages中 搜索需要的第三方库,打开项目中的配置文件,名为:pubspec.yaml,找到dependencies选项,这

    2024年02月14日
    浏览(41)
  • flutter的引擎,Dart语言概括

    Dart是谷歌开发的, 类型安全的 , 面向对象 的编程语言,被应用于 Web、服务器、移动应用和物联网 等领域。 dart是谷歌在2011年推出的编程语言。谷歌希望使用dart来取代JavaScript。谷歌是一个颠覆式创新公司,谷歌退出golang是为了取代java,c++。谷歌退出flutter就是为了取代R

    2023年04月22日
    浏览(43)
  • 【Flutter】dart构造函数、工厂构造函数

    在OOP中,我们会使用类来定义一类对象的属性,和行为。通过调用该类的构造函数来创建类的实例对象。在通过调用方法来实现操作行为。 和大多数 OOP 语言一样, dart 的构造函数,采用和类同名的函数名作为构造函数, 不显示声明构造函数会自动创建无参构造,构造函数不

    2024年01月21日
    浏览(33)
  • Flutter 四:main.dart简单介绍

    main.dart简单介绍 运行结果

    2024年02月03日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包