面向对象的Dart类型系统
2024-02-12 16:17:04
Dart 是一种面向对象的编程语言,支持面向对象编程的五大支柱。
Dart 里的类型又可分为原生类型、泛型类型和特殊类型。
原生类型包括:bool、int、num、double、String、List、Map、Set、Rune、Symbol。
- bool :布尔类型,可取值 true 或 false。
- int :整数类型,可取值范围为 -2^63 到 2^63-1。
- num :数字类型,可表示整数或浮点数。
- double :浮点数类型,可表示小数。
- String :字符串类型,可表示一段文本。
- List :列表类型,可存储多个元素,元素可以是任何类型。
- Map :映射类型,可将键映射到值,键和值可以是任何类型。
- Set :集合类型,可存储多个不重复的元素,元素可以是任何类型。
- Rune :字符类型,可表示一个 Unicode 字符。
- Symbol :符号类型,可表示一个唯一的标识符。
泛型类型是在原生类型基础上派生出来的类型,可用于表示一组具有相同特征的类型。
特殊类型包括:
- dynamic :动态类型,可表示任何类型。
- void :空类型,表示没有类型。
- Never :从不类型,表示永远不会发生的情况。
泛型
泛型类型允许开发人员定义可用于多种类型的数据结构和算法。泛型类型使用尖括号 <> 来表示,尖括号内是泛型类型参数。泛型类型参数可以是任何类型,包括原生类型、泛型类型和特殊类型。
例如,以下代码定义了一个泛型类型 List<T>
,它表示一个可以存储任何类型元素的列表:
class List<T> {
List();
void add(T value);
T removeAt(int index);
T operator[](int index);
}
以下代码创建一个 List<int>
列表,并向其中添加一些整数:
List<int> numbers = List<int>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
接口
接口是定义一组方法和属性的契约。接口可以被类或其他接口实现。
例如,以下代码定义了一个 Comparable
接口,它定义了一个 compareTo
方法,该方法用于比较两个对象的大小:
interface Comparable<T> {
int compareTo(T other);
}
以下代码定义了一个 Person
类,它实现了 Comparable
接口:
class Person implements Comparable<Person> {
String name;
int age;
Person(this.name, this.age);
@override
int compareTo(Person other) {
return name.compareTo(other.name);
}
}
继承
继承允许一个类从另一个类派生,派生类继承了基类的所有成员,包括属性、方法和构造函数。
例如,以下代码定义了一个 Employee
类,它从 Person
类派生:
class Employee extends Person {
String company;
Employee(String name, int age, String company) : super(name, age) {
this.company = company;
}
}
以下代码创建了一个 Employee
对象:
Employee employee = Employee("John", 30, "Google");
多态
多态允许一个变量引用不同类型的对象,只要这些对象都实现了相同的接口或派生自相同的基类。
例如,以下代码定义了一个 printName
函数,它可以打印任何实现了 Comparable
接口的对象的名称:
void printName(Comparable<T> object) {
print(object.name);
}
以下代码调用 printName
函数,分别打印 Person
对象和 Employee
对象的名称:
Person person = Person("John", 30);
Employee employee = Employee("John", 30, "Google");
printName(person);
printName(employee);
总结
Dart 是一种面向对象的编程语言,支持面向对象编程的五大支柱。Dart 里的类型又可分为原生类型、泛型类型和特殊类型。泛型类型允许开发人员定义可用于多种类型的数据结构和算法。接口是定义一组方法和属性的契约。继承允许一个类从另一个类派生,派生类继承了基类的所有成员。多态允许一个变量引用不同类型的对象,只要这些对象都实现了相同的接口或派生自相同的基类。