Dart 基础三:深入了解类,构建可重用的代码
2023-10-31 12:36:40
Dart 中的类:面向对象编程的基础
在软件开发中,类是创建对象并封装数据和行为的蓝图。在 Dart 中,类是面向对象编程 (OOP) 的基石,它允许开发者将具有相似特征和行为的对象组织起来。通过理解 Dart 中类的概念,你可以创建可重用、可维护且可扩展的代码。
定义类
类使用 class
定义,后面跟类名。类体用花括号 {}
括起来,里面包含类的属性和方法的定义。
class Person {
String name;
int age;
// 构造函数
Person(this.name, this.age);
}
代码示例:
上述代码定义了一个名为 Person
的类,它具有两个属性:name
(字符串)和 age
(整数)。该类还定义了一个构造函数,用于在创建 Person
对象时初始化这些属性。
构造函数
构造函数是类中一种特殊的函数,用于创建新对象并初始化其属性。构造函数与类同名,没有显式返回类型。Dart 中的构造函数可以具有可选参数和命名参数。
class Person {
String name;
int age;
// 带有可选参数的构造函数
Person(this.name, this.age);
// 带有命名参数的构造函数
Person.fromJson(Map<String, dynamic> json) {
name = json['name'];
age = json['age'];
}
}
代码示例:
上述代码中,Person
类具有两个构造函数:一个带有两个必需参数 name
和 age
的构造函数,另一个带有命名参数的构造函数,允许从 JSON 数据创建 Person
对象。
属性
属性是类的成员变量,用于存储对象的状态数据。Dart 中的属性可以是实例属性或静态属性。实例属性与特定对象关联,而静态属性则与整个类关联。
class Person {
String name; // 实例属性
static int count = 0; // 静态属性
}
代码示例:
上述代码中,Person
类具有两个属性:name
(实例属性),用于存储每个人的姓名,和 count
(静态属性),用于跟踪创建的 Person
对象数量。
方法
方法是类的成员函数,用于定义对象的行为。Dart 中的方法使用 ()
括起来,后面跟参数列表和方法体。方法可以返回一个值,也可以不返回任何值(void
)。
class Person {
String getName() {
return name;
}
void setAge(int newAge) {
age = newAge;
}
}
代码示例:
上述代码中,Person
类具有两个方法:getName
(返回人的姓名)和 setAge
(设置人的年龄)。
类继承
Dart 中的类可以从其他类继承,这是一种代码重用和扩展类功能的方法。使用 extends
关键字指定超类,派生类继承超类的属性和方法。
class Employee extends Person {
double salary;
// 调用超类构造函数
Employee(String name, int age, this.salary) : super(name, age);
}
代码示例:
上述代码中,Employee
类从 Person
类继承。它添加了一个 salary
属性和一个带有三个参数的构造函数,其中两个参数传递给超类构造函数。
总结
类是 Dart 中面向对象编程的基础。通过理解类的定义、构造函数、属性和方法,你可以创建可重用、可维护且可扩展的代码。类的继承允许你重用代码并扩展类的功能。使用类可以极大地提高你的 Dart 应用程序的开发效率和可伸缩性。
常见问题解答
1. Dart 中的类和结构有什么区别?
类是面向对象编程的基石,允许继承和多态性。结构是不可变的类,不能被继承或扩展。
2. 什么时候应该使用实例属性而不是静态属性?
实例属性用于存储与特定对象相关的数据,而静态属性用于存储与整个类相关的数据。
3. 构造函数与方法有什么区别?
构造函数用于初始化对象的属性,而方法用于定义对象的的行为。
4. Dart 中的类和 mixin 有什么区别?
类用于封装数据和行为,而 mixin 用于向现有类添加新行为而不使用继承。
5. Dart 中的类和接口有什么区别?
类用于创建对象,而接口定义了对象的契约,其他类必须实现该契约才能使用该对象。