持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第18天,点击查看活动详情
类的继承
继承是面向对象三大特性之一。Dart 中的继承为单继承
Dart 中的继承格式,使用关键字 extends 修饰
class Person {
//...
}
class Student extends Person {
//...
}
继承父类的公有属性及方法
class Person {
late String name;
late int age;
bool get getAdult {
return age > 18;
}
void sayHI() {
print("父类方法。\n name:$name,age: $age, adult:$getAdult");
}
}
class Student extends Person {
//...
}
void main(List<String> args) {
final stu = Student();
stu.name = "dart";
stu.age = 15;
stu.sayHI();
}
log:
父类方法。
name:dart,age: 15, adult:false
重写父类的计算属性
class Person {
late String name;
late int age;
bool get getAdult {
return age > 18;
}
void sayHI() {
print("父类方法。\n name:$name,age: $age, adult:$getAdult");
}
}
class Student extends Person {
// 重写父类计算属性
bool get getAdult {
return age > 10;
}
}
void main(List<String> args) {
final stu = Student();
stu.name = "dart";
stu.age = 15;
stu.sayHI();
}
log:
父类方法。
name:dart,age: 15, adult:true
重写父类的方法,使用 @override 修饰
class Person {
late String name;
late int age;
bool get getAdult {
return age > 18;
}
void sayHI() {
print("父类方法。\n name:$name,age: $age, adult:$getAdult");
}
}
class Student extends Person {
// 重写父类计算属性
bool get getAdult {
return age > 10;
}
// 重写父类方法
@override
void sayHI() {
print("子类重写父类方法。\n name:$name,age: $age, adult:$getAdult");
}
}
void main(List<String> args) {
final stu = Student();
stu.name = "dart";
stu.age = 15;
stu.sayHI();
}
log:
子类重写父类方法。
name:dart,age: 15, adult:true
继承中的构造方法
-
子类的构造方法默认会调用父类的默认构造方法
class Person { Person() { print("父类默认初始化"); } } class Student extends Person { //... } void main(List<String> args) { final stu = Student(); } log: 父类默认初始化 -
如果父类拥有有参数的默认构造方法,则子类的构造方法必须在初始化列表中通过
super显式调用父类的这个构造方法class Person { late String name; late int age; Person(this.name, this.age) { print("父类有参数初始化"); } } class Student extends Person { // 子类构造方法参数后使用 : 显示调用父类构造方法 Student(String name, int age) : super(name, age); } void main(List<String> args) { final stu = Student("dart", 18); } log: 父类有参数初始化