📅  最后修改于: 2023-12-03 15:14:36.226000             🧑  作者: Mango
在 Dart 中,super
和 this
关键字可以被用来引用父类的成员和当前类的成员。本文将介绍这两个关键字的用法和示例。
super
关键字用来引用父类的成员,包括字段、方法和构造函数。它有两种用法:
在子类中,可以使用 super
关键字来引用父类的字段或方法,如下所示:
class Person {
String name = "John";
void sayHello() {
print("Hello, I'm $name");
}
}
class Student extends Person {
void introduce() {
print("My name is $name"); // 引用父类的字段
super.sayHello(); // 调用父类的方法
}
}
void main() {
var student = new Student();
student.introduce();
}
输出:
My name is John
Hello, I'm John
在子类的构造函数中,可以使用 super
关键字来调用父类的构造函数。如果子类没有显式调用父类的构造函数,则默认调用父类的无参构造函数。示例代码如下:
class Person {
String name;
Person(this.name);
}
class Student extends Person {
int grade;
Student(String name, this.grade) : super(name);
}
void main() {
var student = new Student("John", 8);
print("${student.name} is in ${student.grade}th grade");
}
输出:
John is in 8th grade
this
关键字用来引用当前类的成员,包括字段、方法和构造函数。它也有两种用法:
在类的方法中,可以使用 this
关键字来引用这个类的字段或方法,如下所示:
class Person {
String name;
Person(this.name);
void introduce() {
print("My name is $name");
}
}
void main() {
var person = new Person("John");
person.introduce();
}
输出:
My name is John
在一个构造函数中,可以使用 this
关键字来调用当前类的其他构造函数。这个构造函数必须是这个类的其他构造函数的直接或间接调用。示例代码如下:
class Person {
String name;
Person(this.name);
Person.fromAge(int age) : this("Unknown${age.toString()}");
void introduce() {
print("My name is $name");
}
}
void main() {
var person1 = new Person("John");
person1.introduce();
var person2 = new Person.fromAge(30);
person2.introduce();
}
输出:
My name is John
My name is Unknown30
super
和 this
关键字可以让我们方便地访问父类或当前类的成员,提高了代码的可读性和可维护性。在使用时,需要注意一些特殊的细节,如不要在构造函数之外使用 this
关键字等。