持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情
类的定义
Dart 是一个面向对象的编程语言,所有的类都继承于 Object。在 Dart 中,使用class 关键字声明一个类,后面跟类名,并且由一对花括号包围
class Student {
String? name;
int? age;
void sayHI() {
}
}
构造方法
默认构造函数
如果没有声明构造函数,那么 Dart 会自动生成一个无参数的构造函数,并且该构造函数会调用其父类的无参数构造方法
class Student {
String? name;
int? age;
void sayHI() {
}
}
void main(List<String> args) {
var stu = Student();
}
如果有了自定义的构造函数时,默认的构造函数就可以使用了,这是因为 Dart 不支持函数重载(即方法名相同,参数不同)
class Student {
String? name;
int? age;
Student(String name, int age) {
this.name = name;
this.age = age;
}
}
void main(List<String> args) {
var stu = Student("dart", 18);
}
在 Dart 中,提供了一种特殊的语法糖来简化该步骤
class Student {
String? name;
int? age;
Student(this.name,this.age);
}
命名构造函数
由于 Dart 中不支持函数重载,但是实际开发中又需要其他的构造函数,这时需要使用命名构造函数
class Student {
String? name;
int? age;
double? height;
Student(this.name, this.age);
// 命名构造函数
Student.withNameAgeHeight(this.name, this.age, this.height);
Student.withMap(Map<String, dynamic> map) {
this.name = map["name"];
this.age = map["age"];
this.height = map["height"];
}
// 重写 toString 方法,可以打印出具体的对象信息
@override
String toString() {
return "$name $age $height";
}
}
void main(List<String> args) {
var stu = Student("dart", 18);
var stu1 = Student.withNameAgeHeight("dart", 18, 180.0);
var stu2 = Student.withMap({
"name": "dart",
"age": 18,
"height": 180.0
});
print(stu1);
print(stu2);
print(stu3);
}
log:
dart 18 null
dart 18 180.0
dart 18 180.0
初始化列表
在 Dart 中,可以在构造函数体运行之前初始化实例变量,每个实例变量之间使用逗号分隔
class Student {
String? name;
int? age;
double? height;
// 初始化列表
Student(this.name)
: age = 12,
height = 180.0 {
print(this.name);
}
// 重写 toString 方法,可以打印出具体的对象信息
@override
String toString() {
return "$name $age $height";
}
}
void main(List<String> args) {
var stu = Student("dart");
print(stu.toString());
}
log:
dart
dart 12 180.0