在 Dart 中,类是一种用于创建对象的蓝图。通过定义类,你可以创建具有相同属性和行为的对象集合。本章将详细介绍如何声明和使用 Dart 中的类。
类的基本结构
定义一个类
要定义一个类,可以使用 class
关键字。下面是一个简单的类定义示例:
-- -------------------- ---- ------- ----- ------ - -- -- ------ ----- --- ---- -- ---- ----------------- ---------- -- -- ---- ----------- - ------------ -------- ---- ----- - -
在这个例子中,我们定义了一个名为 Person
的类,它有两个属性:name
和 age
。此外,我们还定义了一个构造函数 Person
和一个方法 introduce
。
访问修饰符
Dart 没有像 Java 或 C++ 那样的显式访问修饰符(如 public
, private
, protected
)。但是,Dart 提供了一种通过下划线 _
来模拟私有属性和方法的方式。
-- -------------------- ---- ------- ----- ------ - ------ ------ -- ---- --- ----- ------------------ ----------- ---- ----------------- - ---------------- - ---- -------------- - ---------------- - - ---- ------ - --- ------ - ------------ ---- -- -------------------- -- -------------- ---------------------- -- -- -- ------------------------- -- -------------- -
默认构造函数
如果你不定义任何构造函数,Dart 会自动为你提供一个默认构造函数。
-- -------------------- ---- ------- ----- ------ - ------ ----- --- ---- -- ----------------------- - ---- ------ - --- ------ - --------- ----------- - ----- ---------- - --- -
命名构造函数
除了默认构造函数外,你还可以定义命名构造函数,这使得创建类的实例更加灵活。
-- -------------------- ---- ------- ----- ------ - ------ ----- --- ---- ----------------- ---------- -- ------ ------------------------ - ---- - ----- -- ---------- - ---- ------ - --- ------- - ------------ ---- --- ------- - ------------------- -------------------- -- --- -- -------------------- -- --- -- -
工厂构造函数
工厂构造函数允许你在运行时决定返回的对象类型,或者返回缓存的对象实例。
-- -------------------- ---- ------- ----- ------ - ------ ----- --- ---- ----------------- ---------- ------- ---------------------- ----- - ------ ------------ --- - ------- ----------------------- ----- - -- ----------- ------ ------------ ---- - - ---- ------ - --- ------- - ---------------------- --- ------- - ----------------------- -------------------- -- --- -- ------------------- -- --- - -------------------- -- --- -- ------------------- -- --- -- -
初始化列表
初始化列表允许你在构造函数体之前执行一些初始化操作,例如调用超类的构造函数或初始化常量字段。
-- -------------------- ---- ------- ----- ------ - ----- ------ ----- --- ---- -- ----------- ----- -- ----------------- --------- - ---------- -- --- ---- ---------- - ------------ -------- ---- ----- - - ---- ------ - --- ------ - ------------ ---- ------------------ -- --- ----- ----- -- -- -
静态成员
静态成员属于类而不是类的实例。它们可以通过类名直接访问,而无需创建类的实例。
-- -------------------- ---- ------- ----- ------ - ------ ------ ------- - ----- ----------------- ---------- ------ ----- --- ---- ---- ----------- - --------- --------------- -------------------- - - ---- ------ - --- ------ - ------------ ---- ------------------- -- --- -- ----- -- ---------------------- -- --- -- -
抽象类
抽象类不能被实例化。它们通常用于定义一组子类应该实现的方法。
-- -------------------- ---- ------- -------- ----- ------ - ---- ------------ - ----- --- ---------- ------ - --------- ---- ----------- - ------------- - - ---- ------ - --- --- - ------ ---------------- -- --- --- -- --- ------ - --------- -- ----------- -
接口
Dart 不直接支持接口,但你可以通过抽象类或使用 mixin 来实现类似的功能。
-- -------------------- ---- ------- -------- ----- ------- - ---- ------- - ----- --- ---------- ------- - --------- ---- ------ - ---------------- - - ---- ------ - --- --- - ------ ----------- -- --- ------ -
继承
Dart 支持单继承,这意味着每个类只能有一个父类。
-- -------------------- ---- ------- ----- ------ - ---- ----- - ---------------- - - ----- --- ------- ------ - ---- ------ - ------------- - - ---- ------ - --- --- - ------ ---------- -- --- ------ ----------- -- --- --- -
覆写方法
子类可以覆写超类中的方法。
-- -------------------- ---- ------- ----- ------ - ---- ----------- - ----------------- - - ----- --- ------- ------ - --------- ---- ----------- - --------------- - - ---- ------ - --- --- - ------ ---------------- -- --- ----- -
调用超类方法
有时需要调用超类的方法。你可以使用 super
关键字来实现这一点。
-- -------------------- ---- ------- ----- ------ - ---- ----------- - ----------------- - - ----- --- ------- ------ - --------- ---- ----------- - ------------------ -- ----- --------- -- --------------- - - ---- ------ - --- --- - ------ ---------------- -- --- ------- ----- -
常量构造函数
如果你想创建不可变对象,可以使用常量构造函数。
-- -------------------- ---- ------- ----- ------ - ----- ------ ----- ----- --- ---- ----- ----------------- ---------- --------- ------ ---------- -- ------------- ------ ---- ------- - ---- ------ - ----- ------ - ------------ ---- -------------- -- --- ------------ --- ---- --- -
泛型类
泛型类允许你定义可以在多种数据类型之间重用的类。
-- -------------------- ---- ------- ----- ------ - - ----- --------------- - --------- -- ----- - ---- ------ - --- --------- - --------------------- --------------------------- -- --- ----- --- ------ - ------------- ------------------------ -- --- -- -
使用泛型类
你可以使用泛型类来处理不同类型的数据,并在运行时确定类型。
-- -------------------- ---- ------- ----- ------- - - ------ - ------- ---------------- ------------- - ---- ------ - --- ---------- - --------------------- ---------- --------------------------- ----------------------- -- --- ------ ------ --- ------- - ------------ --- ------------------------ -------------------- -- --- -- - -
组合类
组合是一种设计模式,通过组合现有类来构建新的功能。
-- -------------------- ---- ------- ----- ------ - ---- ------- - ---------------- - - ----- --- - ------ ------- ----------------- ---- ------------- - --------------- - - ---- ------ - --- --- - -------------- ------------------ -- --- ------ -
以上内容详细介绍了 Dart 中类的声明及其各种特性。希望这些信息对你理解和使用 Dart 类有所帮助。