返回

Dart 基础三:深入了解类,构建可重用的代码

Android

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 类具有两个构造函数:一个带有两个必需参数 nameage 的构造函数,另一个带有命名参数的构造函数,允许从 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 中的类和接口有什么区别?

类用于创建对象,而接口定义了对象的契约,其他类必须实现该契约才能使用该对象。