Dart入门——类

40分钟快速入门Dart基础(中) 简单的理解,就是用来复用多个类之间的代码,减少耦合。我们直接来看一个例子。我们在没有使用Mixins的从前:假设,我们现在正在开发一个动物大全App,我们需要创建一个Duck类。作为一个有丰富面向对象编程经验的开发者,你自然的将所有和Duck有相似特征的抽取成一个abstract class。 阅读详情


Dart是面向对象的语言,其用法和大部分面向对象语言如java很相似。此外Dart还有很多特有的语法。

变量
变量声明

类的变量声明时需要先对其进行初始化。

class Person {
  // 方式一: 设置默认值
  // int age = 0;
  // String name = "";
  
  // 方式二: 指明延后初始化,类似于kotlin的 lateinit var
  // late int age;
  // late String name;
  
  // 方式三: 设置为可空类型,与kotlin的可空类型相似
  // int? age;
  // String? name;
}
变量的getter/setter

所有实例变量均会隐式地声明一个 Getter 方法, 非final类型还会隐式地声明一个 Setter 方法。

var person = Person();
// 调用name的setter方法
person.name = 'Dart';
// 调用name的getter方法
print(person.name);
静态变量

Dart的静态变量除了用static修饰外,还需要const。

static const String country = 'China';
构造函数
默认构造

和java一样,在没有声明构造方法时,会有个默认的无参构造方法。

class Person {
  int age = 0;
  String name = "";
}

void main(){
  // 调用默认构造函数
  var person = Person();
}
有参构造

可以在构造方法中对属性进行赋值,和jave一样:

class Person {
  int age = 0;
  String name = "";
  
  Person(int age, String name) {
  	this.age = age;
  	this.name = name;
  }
}

在Dart的语法糖里上面代码可以简化:

class Person {
  int age;
  String name;
  
  Person(this.age, this.name);
}
为构造函数命名

Dart中可以为构造函数命名:

class Person {
  int age = 0;
  String name = "";

  Person(this.age, this.name);
  // 将构造函数命名为fromJson
  Person.fromJson(Map<String, dynamic> json) {
    this.age = json['age'];
    this.name = json['name'];
  }
}

void main(){
  // new可以省略
  var person = new Person.fromJson({"age":18,"name":"dart"});
  print(person.age);
  print(person.name);
}
常量构造函数
class Person {
  // 常量构造引用的字段必须为final修饰
  final int age;
  final String name;

  const Person.create(this.age, this.name);
}
void main() {
  var person1 = const Person.create(10, "Dart");
  var person2 = const Person.create(10, "Dart");
  var person3 = const Person.create(11, "Dart");
  var person4 = Person.create(10, "Dart");
  var person5 = Person.create(10, "Dart");
  // 返回true, 即person1和person2为同一个实例
  print(person1 == person2);
  // 返回false, person1和person3构造参数不同
  print(person1 == person3);
  // 返回false, person4和person5调用构造时没有使用const关键字
  print(person4 == person5);
}

总结:
  1.常量构造函数需要使用const修饰,引用的属性需要用final修饰。
  2. 当调用常量构造函数使用const修饰时,如果构造参数一致则为同一个对象。
  3. 当调用常量构造函数未使用const修饰时,则为和普通构造一样。

方法
操作符重写

Dart的方法使用和Java一致,此外Dart支持操作符重载

class Point {
  int x;
  int y;

  Point(this.x, this.y);
  // 需要operator关键字修饰
  Point operator +(Point point) => Point(point.x + x, point.y + y);
}

void main() {
  var point1 = Point(10, 10);
  var point2 = Point(10, 20);
  var point3 = point1 + point2;
  // 打印结果 x:20 y:30
  print("x:${point3.x} y:${point3.y}");
}
获取对象类型

Dart中使用 runtimeType 判断对象的实例类型

void main() {
  // 推断类型未初始化,类型为Null
  var a;
  // 推断类型,已初始化
  var b = 1;
  // 强类型
  String s = "";
  // 打印 Null
  print(a.runtimeType);
  // 打印 int
  print(b.runtimeType);
  // 打印 String
  print(s.runtimeType);
}
抽象类

Dart和Java一样可以通过abstract 来定义一个抽象类,但抽象方法不需要abstract修饰,只需要去除方法体。同样继承抽象类需要实现其抽象方法。

abstract class Drawable {
  // 没有方法体,为抽象方法
  void draw();
  // 有方法体,为普通方法
  void setPaint() {
    print("设置一个画笔");
  }
}

class Point extends Drawable{
  int x;
  int y;

  Point(this.x, this.y);

  @override
  void draw() {
    // 这里实现抽象方法
  }
}
接口

在Dart中没有interface的关键字,但每个类都可以作为一个接口被另一个类实现。

class Person {
  int age=0;
  String name="";

  Person(this.age, this.name);

  void say(){
    print("Person say");
  }
}

class Chinese implements Person{
  // Person的成员变量被继承下来
  @override
  int age=0;

  @override
  String name="";
  
  // Person的方法被继承下来
  @override
  void say() {
    print("Chinese say");
  }

}

void main(){
  // Person的构造函数没有被继承
  var chinese=Chinese();
  chinese.say();
}

Person的成员变量和方法被继承下来,而构造函数没有被继承。但成员变量和方法都需要Chinese自己初始化和实现。

dart学习(1) - 语言分类,dart运行,dart语法 前言 接上篇flutter学习(1), 阅读详情

相关推荐

Seurat3.0小提琴图腰围的参数

小提琴图没有有些群没有出现小提琴只有点点,是由于0值比例太多, 一个关键的参数scale = "width"导致了这种局面,应加上上述参数 ggplot(p$data,aes(ident,CD4)) + geom_violin(scale = "width", adjust =1, trim = TRUE) + geom_jitter()+ theme_bw() adjust参数可以调整腰的粗细,eg: ggplot(p$data,aes(ident,CD4)) + geom_violin(scale

Demomwu的博客 1661

Dart中内置常用元数据@deprecated、@override、@proxy、@required和自定义元数据

元数据:主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。 1、@deprecated被弃用的 含义:若某类或某方法加上该注解之后,表示此方法或类不再建议使用,调用时也会出现删除线,但并不代表不能用,只是说,不推荐使用,因为还有更好的方法可以调用。 作用:因为在一个项目中,工程比较大,代码比较多,而在后续开发过程中,可能之前的某个方法实现的并不是很合理,这个时候就要新加一个方法,而之前的方法又不能随便删除,因为可能在别的地方有调用它,所以加上这个注解,

清风明月的博客 3788

普源精电DHO系列示波器选购指南:从学生党到工程师的完整对比

本文深入评测普源精电DHO系列示波器,从DHO800到DHO4000各型号的核心参数、功能特点及适用场景进行全面对比,帮助学生党和工程师根据实际需求选择最佳型号。重点分析带宽、采样率、存储深度等关键指标,并提供实用的选购建议和进阶使用技巧,帮助用户充分发挥示波器性能。

weixin_30485379的博客 166

Dart 编程语言教程 - 第一章:注解

你还可以定义自己的注解,以满足特定的需求。自定义注解是通过创建类来实现的,通常这些类不包含逻辑,仅用于标识。Dart 的注解功能为代码元数据的标记提供了强大的支持,能够通过简单的注解为编译器、工具和框架提供重要信息。开发者还可以通过自定义注解来扩展这一功能,使得代码更加灵活易用。

ljguo2008的专栏 1000

Modbus 通信协议详解

Modbus是由 Modicon(现为施耐德电气公司的一个品牌)在 1979 年发明的,是全球第一个真正用于工业现场的总线协议。ModBus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。其系统结构既包括硬件、亦包括软件。它可应用于各种数据采集和过程监控。为更好地普及和推动Modbus在基于以太网上的分布式应用,目前施耐德公司已将Modbus协议的所有权移交给 IDA(,分布式自动化接口)组织,并成立了 Modbus-IDA 组织。

Projectsauron 的博客 7万+

1️⃣ Coze智能体基础入门教学(2025年全新版本)

不妨设想一下,倘若我们能够打造出一个数字助手,它不但能精准洞悉我们的需求,更可以独立思索、学习以及付诸行动,这便是 AI Agent 的基础理念。它恰似计算机世界里的 “智慧精灵”,能够感知周遭环境、做出判断并采取行动。AI Agent 的发展之路精彩纷呈。它走过了三个重要阶段:起初,它犹如一个被规则束缚的机器人,只能按预设好的指令开展工作。接着,它学会运用统计学方法,通过分析数据来做决策,变得越发灵活。到如今,凭借深度学习技术,它已经能够像人类一样去学习复杂的任务了。

李同学Lino的博客 4079

Dart注解

使用Metadata提供有关代码的其他信息。

rd_w_csdn的博客 637

实战指南:理解 ThreadLocal 原理并用于Java 多线程上下文管理

探讨如何基于实现一个高效的上下文管理组件,以解决多线程环境下的数据共享和上下文管理这些问题。通过具体的代码示例和实战展示如何为多线程编程提供一种简洁而高效的上下文管理方案。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 11万+

Flutter: Dart 参数,以及 @required 与 required

Dart 参数类型,以及 @required, required 之间的区别

学习笔记 7784

基于STM32设计的猪舍养殖的监控系统_325

本课题基于STM32单片机,设计一款能够实时监测猪舍环境的智能监控系统。该系统能够通过温湿度、空气质量、光照强度等传感器实时监测猪舍的环境,并能够通过自动化控制设备(如风扇、照明灯、消毒喷雾等)调节环境参数,确保养殖环境的适宜性。同时,系统还支持通过ESP8266模块实现数据上传与远程控制,使养殖管理者能够通过手机APP或计算机远程监控和控制猪舍环境。

408

材料仿真软件:LAMMPS_(8).温度和压力控制

在 LAMMPS 中,温度和压力的控制是通过多种恒温器和恒压器实现的。Nose-Hoover 恒温器和恒压器因其准确性和广泛适用性而被经常使用,而 Berendsen 恒温器和恒压器则因其计算效率高而适用于初步仿真或粗粒化模型。温度重标和压力重标方法虽然简单,但在某些情况下可以快速调整系统的温度和压力。通过选择合适的控制方法,可以根据具体的需求和系统特性来设计和运行分子动力学仿真,从而获得准确和可靠的结果。在实际应用中,建议先进行初步的仿真以确定合适的控制参数,然后再进行细致的仿真以验证结果的稳定性。

kkchenjj的博客 1692

跨平台技术篇 - Dart 语法全解析 (下)

这篇继续来学习 Dart 语法。 目录: 类和函数 mixin 入门 异步 库相关 1.类和函数 Dart是一种面向对象的语言,具有类和基于 mixin 的继承。每个对象都是一个类的实例,所有类都来自Object。 基于Mixin的继承意味着虽然每个类(除了Object)只有一个超类,但是类体可以在多个类层次结构中重用。 (一)类的分类 (1)...

u014294681的博客 1863

【DeepSeek实战】1、DeepSeek民用级开发全指南:从0到1掌握AI应用开发与模型蒸馏实战

DeepSeek创新性地打破了传统AI开发的技术壁垒,通过双模型架构(DeepSeek-V3和R1)实现普惠化与专业化并重。其核心优势包括:零代码操作、浏览器直接使用、中文提示词控制及低成本(2元/百万token)。用户通过简单三步(注册-配置-使用)即可快速开启AI之旅,平台提供$50免费额度支持2个月高频使用。 四大核心应用场景: 办公自动化:周报撰写、PPT生成、数据分析一键完成 内容创作:提供爆款标题生成、垂直领域写作模板 学习辅助:支持文档解析、错题讲解、知识图谱构建 生活服务:个性化行程规划

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 1734

Dart入门—类与方法

Dart入门—类与方法实例变量声明实例变量时,所有未初始化的实例变量的值为nullvoid main(){ var point = new Point(); point.x = 4; print(point.x); print(point.y); }class Point { int x; // null int y; // nul

咖啡花园 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Dart 入门(4)类

类 Dart 是一种基于类和 mixin 继承机制的面向对象的语言。 每个对象都是一个类的实例,所有的类都继承于 Object. 。 基于 * Mixin 继承* 意味着每个类(除 Object 外) 都只有一个超类, 一个类中的代码可以在其他多个继承类中重复使用。 使用类的成员变量 对象的由函数和数据(即方法和实例变量)组成。 方法的调用要通过对象来完成: 调用的方法可以访问其对象的其他函数和数据。 使用 (.) 来引用实例对象的变量和方法: 定义一个类 类由 class 关键字定义,下面我们将定义一个名

MusicCannon的博客 1717

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

3.Dart入门-类

文章目录定义函数的三种方法参数的定义函数main()函数将函数传递给另一个函数为变量分配函数匿名函数闭包函数返回值 Dart是一种真正的面向对象语言,所以即使函数也是对象,具有类型和功能。这意味着函数可以分配给变量或作为参数传递给其他函数。 定义函数的三种方法 1.明确的返回值和参数类型 String getName(String name){ return "${name} is the name"; } dynamic 方式 自动判断返回值和参数的类型 省略了类型,这个函数仍然可以工作: ge

淡暗 455

Dart语言入门学习-类(五)

使用类成员变量 使用构造函数 获取一个对象类型 实例变量 构造函数 方法 抽象类 隐式接口 继承一个类 枚举类型 给一个类添加mixins特性 类的变量和方法 ...

数据结构和算法 395

Flutter开发Dart极速入门 (类和对象)

类 一般构造函数 main() { Point point; point = Point(1, 2); print('${point.x} ${point.y}'); // print: 1 2 } class Point { int x; int y; // 基本写法 Point(this.x, this.y); } 命名构造函数 main() { Point ...

smile_shaco的博客 571

Dart类图生成器:dcdg的入门与实践

Dart类图生成器:dcdg的入门与实践 项目介绍 dcdg, 即 Dart Class Diagram Generator, 是一个小型命令行工具,旨在从Dart包自动生成类似UML的类图表。此工具对于理解和可视化复杂的Dart项目结构特别有用,它通过分析源码,输出PlantUML或Mermaid语法的文件,从而帮助开发者快速绘制出项目中的类关系图。项目遵循Apache-2.0许可证,并且兼容D...

gitblog_00613的博客 551

面向Kotlin与Java开发者的Dart快速入门(七)类的成员方法

成员方法 与Java的成员方法无论在定义或是调用上没有区别。 惟一的区别是Dart的成员方法无法重载,但是有可选参数的加持,也没有大问题 getter/setter Dart的getter/setter与Kotlin的类似,但是没有backing filed的概念,所有没有filed变量用来存储数据,需要自己声明一个私有变量来充当所谓的backing field class Rect { ...

移动端开发干货分享 306

Flutter 零基础入门(八):Dart 类(Class)与对象(Object)

本文是Flutter零基础入门系列的第八篇,重点讲解Dart语言中类(Class)与对象(Object)的概念和应用。文章对比了使用Map和Class处理数据的差异,指出Class在类型检查、结构清晰度和项目适用性上的优势。详细介绍了如何定义类、创建对象、添加方法,以及类在实际项目中的应用场景。通过List+Class的组合示例,展示了Flutter项目中常见的数据处理方式。文章强调类是Flutter开发的核心基础,掌握类将为后续学习Widget、页面状态管理等奠定重要基础。最后预告下一篇将深入讲解构造函数

工作,学习历程分享 991

Dart 入门到跑路 ------ 对象、类、类的继承、私有方法(四)

面向对象OOP 三个基本特征 继承、封装、多态 封装 :封装把客观事物封装成抽象的类,并且把自己的部分属性和方法提供给其他对象调用,一部分属性和方法隐藏 继承 :可以使用现有类的功能,并在无需重新编写原来类的情况下对这些功能进行扩展 多态 :执行统一函数有不同的执行结果 Dart 中所有东西都是对象,所有对象都继承Object类 (iOS类似) Dart 中所有类都是Object 子类 一个...

More丶的博客 931

HoRain云--Dart类与对象:从入门到精通实战

这篇文章系统介绍了Dart语言的面向对象特性,包括: 类与对象的基础语法:通过User类示例展示类定义、成员变量/方法、对象创建 构造函数的多种形式:包括普通构造、命名构造、重定向构造、常量构造和工厂构造 封装特性:私有成员(_前缀)和getter/setter的使用 继承机制:单继承extends、方法重写@override、接口实现implements 混入(Mixin)特性:通过with实现多继承效果,解决代码复用问题 综合示例:结合抽象类、混入、getter等特性演示Shape类的实现 全文以Flu

2401_86544677的博客 148

面向Kotlin与Java开发者的Dart快速入门(六)类与实例化

类(Class) 与Java相同,Dart中所有的类都是Object的子类。 与Java和Kotlin一样,this关键字指向当前实例,Dart的代码风格建议省略this,仅在名称冲突等必要的时候使用。 Dart1的对象实例化与Java一样使用new关键字,Dart2开始可以向Kotlin一样不使用new创建实例 实例通过instance.runtimeType可以获取一个类型对象,相当于Jav...

移动端开发干货分享 459

Dart基础入门

Dart 是一种由 Google 开发的开源编程语言,它可以用来构建服务器、Web 应用和移动应用。Dart 语言设计得既现代化又易于学习,它支持面向对象编程(OOP)、函数式编程风格,并且具有类似于 Java 或 C# 的语法。Dart 语言和 Flutter 框架紧密相关,Flutter 是一个由 Google 开发的开源 UI 软件开发工具包(SDK),用于构建跨平台的应用程序。

超级博客 1042

Dart 入门到跑路 ------ 类的继承、静态成员、抽象类、接口(五)

静态成员 使用static 关键字来实现类级别的变量和函数 静态方法不能访问非静态成员 class Person{ static String name = '1'; static void show(){ print(11111); } } 对象操作符 ? 条件运算符 as 类型转换 is 类型判断 .. 级联操作 class ...

More丶的博客 445
上一篇: Flutter error——onNewIntent overrides nothing
下一篇: Dart入门——扩展方法和Mixin
得食猫
博客等级 码龄11年 50粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

得食猫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值