【Flutter】Dart:类

news/2024/10/17 10:29:09/

在 Dart 中,(Class)是面向对象编程的核心概念之一,提供了一种封装数据和功能的方式。理解 Dart 中的类以及它的相关特性是开发 Flutter 应用的基础。本教程将深入介绍 Dart 中类的定义、属性、构造函数、方法、接口、Mixin 以及枚举类,帮助你在 Flutter 应用开发中高效使用类。

Dart 中类的定义

在 Dart 中,类的定义使用关键字 class,类通常包含属性(变量)和方法(函数)。一个简单的类定义如下:

class Person {String name = '';int age = 0;void introduce() {print('My name is $name and I am $age years old.');}
}

在这个 Person 类中,nameage 是属性,introduce() 是类中的方法。我们可以通过创建该类的对象来访问这些属性和方法。

创建对象

void main() {Person person = Person();person.name = 'John';person.age = 25;person.introduce();  // 输出: My name is John and I am 25 years old.
}

属性

类的属性是它的成员变量,用于存储对象的状态或数据。在 Dart 中,属性既可以是实例变量,也可以是类变量(静态变量)。

实例变量

实例变量是属于对象的,每个对象都有独立的实例变量。它们在类的定义中直接声明,且可以通过对象访问。

class Car {String model;int year;Car(this.model, this.year);
}

静态变量

静态变量属于类而不是对象,它在类级别上共享。静态变量使用 static 关键字声明。

class Car {static int totalCars = 0;String model;int year;Car(this.model, this.year) {totalCars++;}
}

示例

void main() {Car car1 = Car('Tesla Model S', 2020);Car car2 = Car('BMW M3', 2021);print(Car.totalCars);  // 输出 2,表示已经创建了两个 Car 对象
}

构造函数

构造函数是用于创建类对象的方法。它通常用于初始化对象的属性。在 Dart 中,构造函数与类名相同。构造函数可以有多种形式:默认构造函数、命名构造函数、工厂构造函数等。

默认构造函数

当我们为类创建对象时,默认构造函数会被自动调用。以下是通过构造函数初始化类的属性的示例:

class Person {String name;int age;Person(this.name, this.age);  // 默认构造函数
}

命名构造函数

命名构造函数允许我们为一个类定义多个构造函数,每个构造函数有不同的名称。这样可以灵活地创建对象。

class Point {double x;double y;Point(this.x, this.y);// 命名构造函数Point.origin() {x = 0;y = 0;}
}

初始化列表

构造函数中的初始化列表允许在构造函数体执行之前初始化属性。它通常用于 final 变量。

class Rectangle {final int width;final int height;final int area;Rectangle(this.width, this.height) : area = width * height;
}

工厂构造函数

工厂构造函数用于控制对象的创建,并且可以返回现有对象而不是每次都创建新对象。使用 factory 关键字定义。

class Singleton {static final Singleton _instance = Singleton._internal();factory Singleton() {return _instance;}Singleton._internal();  // 私有构造函数
}

方法

类中的方法是可以执行某些操作的函数。Dart 中的方法可以像函数一样接收参数和返回值。可以在方法中定义常规方法、静态方法和 getter/setter。

实例方法

实例方法是作用于对象实例的方法。

class Circle {double radius;Circle(this.radius);double getArea() {return 3.14 * radius * radius;}
}

静态方法

静态方法与静态变量类似,属于类而不是对象。它们使用 static 关键字定义。

class MathUtil {static int square(int x) {return x * x;}
}void main() {print(MathUtil.square(5));  // 输出 25
}

Getter 和 Setter

Dart 中可以为属性定义 getter 和 setter 方法,允许控制对属性的访问和修改。

class Student {String _name;// getterString get name => _name;// setterset name(String name) {_name = name;}
}

接口(Interface)

在 Dart 中,所有的类都隐式实现了接口,因此可以通过实现某个类来创建接口。接口用于定义一组方法,这些方法必须由实现该接口的类提供。

class Animal {void speak() {print('Animal is making a sound');}
}class Dog implements Animal {void speak() {print('Dog barks');}
}

在上面的例子中,Dog 实现了 Animal 的接口,并且必须提供 speak 方法的实现。

Mixin

Mixin 是一种在 Dart 中实现代码复用的方式。它允许类在不继承的情况下获得其他类的功能。Mixin 使用 mixin 关键字定义,并通过 with 关键字使用。

mixin Swimmer {void swim() {print('Swimming');}
}class Human with Swimmer {}void main() {Human human = Human();human.swim();  // 输出: Swimming
}

Mixin 的主要作用是让类可以共享行为,而不必使用复杂的继承层次。

枚举类(Enum)

枚举enum)用于定义一组常量,常用于表示固定集合的值。Dart 中使用 enum 关键字定义枚举类型。

enum Weather { sunny, rainy, cloudy }void main() {var today = Weather.sunny;switch (today) {case Weather.sunny:print('It\'s a sunny day!');break;case Weather.rainy:print('It\'s raining!');break;case Weather.cloudy:print('It\'s cloudy!');break;}
}

在这个例子中,Weather 枚举类定义了三种天气情况,switch-case 语句可以根据不同的枚举值执行不同的逻辑。

类的继承

继承是面向对象编程的重要特性之一。在 Dart 中,类可以通过继承其他类来扩展或修改其行为。继承使用 extends 关键字实现。

class Animal {void sleep() {print('Sleeping');}
}class Dog extends Animal {void bark() {print('Barking');}
}void main() {Dog dog = Dog();dog.sleep();  // 输出: Sleepingdog.bark();   // 输出: Barking
}

Dog 类继承了 Animal 类,因此它可以访问 Animal 中的 sleep 方法。

抽象类

抽象类(Abstract Class)是不能被实例化的类,通常用于定义一组共同的行为,由子类具体实现。抽象类使用 abstract 关键字定义。

abstract class Shape {void draw();  // 抽象方法
}class Circle extends Shape {void draw() {print('Drawing a circle');}
}void main() {Circle circle = Circle();circle.draw();  // 输出: Drawing a circle
}

在这个例子中,Shape 是一个抽象类,子类 Circle 实现了 draw 方法。

总结

Dart 中的类为面向对象编程提供了强大的结构,支持属性、构造函数、方法、接口、Mixin 以及枚举类。通过类的继承、抽象类、接口和 Mixin,Dart 提供了丰富的机制来实现代码复用和模块化设计。理解这些概念是开发高效 Flutter 应用的基础。


http://www.ppmy.cn/news/1539685.html

相关文章

Lumerical学习——分析工具(Analysis tools)

一、分析工具和模拟环境(Analysis tools and the simulation environment) 模拟计算完成后,模拟计算数据紧接着写到模拟工程文件中;甚至当模拟计算提前结束时计算得到的部分数据集也会写到文件中。当模拟完成后单击退出按钮、或者…

【深度学习 | 基础部分】深度学习导论

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重…

音视频入门基础:H.264专题(19)——FFmpeg源码中,获取avcC封装的H.264码流中每个NALU的长度的实现

一、引言 从《音视频入门基础:H.264专题(18)——AVCDecoderConfigurationRecord简介》中可以知道,avcC跟AnnexB不一样,avcC包装的H.264码流中,每个NALU前面没有起始码。avcC通过在每个NALU前加上NALUnitL…

Python基础:20、Python基础综合案例

数据可视化 - 折线图可视化 数据可视化 - 地图 数据可视化 - 动态柱状图 1.json数据格式 JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据 JSON本质上是一个带有特定格式的字符串 主要功能:json就是一种在各个编程语言中流通的数据格…

双目标定的原理

标定目的:建立相机成像几何模型并矫正透镜畸变。 建立相机成像几何模型:计算机视觉的首要任务就是要通过拍摄到的图像信息获取到物体在真实三维世界里相对应的信息,于是,建立物体从三维世界映射到相机成像平面这一过程中的几何模…

ppt基础设置介绍

目录 1、字体1.1 西文1.2 中文 1、字体 1.1 西文 在汇报 PPT 中,常用的西文字体包括: Arial:无衬线字体,简洁易读,适合各类报告。Calibri:现代感强,适合正式场合,通常作为默认字体…

泛癌热门靶点TROP2及研究工具试剂

前 言 TROP2属于肿瘤相关抗原之一,在多种肿瘤中表达升高,促进肿瘤细胞生长、增殖和转移。TROP2已经成为近年来NEJM、肿瘤学期刊、药物研发的多重热点。通过PubMed检索到477篇相关文献,自2020年文献数量逐步增加,2022年达81篇&am…

海外代理如何助力企业跨境选品

在全球化趋势的推动下,越来越多的企业将目光投向国际市场,跨境电子商务成为了企业拓展业务的重要方向。然而,成功的跨境选品策略不仅需要充分了解全球市场的信息,还需要应对各类复杂的网络限制。本文将探讨海外代理如何在这一过程…