07-Dart 类的继承
本篇从大地老师《Dart 入门实战教程》学习整理而来。
- 子类使用extends关键词来继承父类
- 子类会继承父类里面可见的属性和方法 但是不会继承构造函数
- 子类能复写父类的方法 getter和setter
简单继承
- 继承的类就有了父类的属性和非静态方法
class Person {
String name='张三';
num age=20;
void printInfo() {
print("${this.name}---${this.age}");
}
}
class Web extends Person{
}
main(){
Web w=new Web();
print(w.name); // 张三
w.printInfo(); // 张三---20
}
super 关键词
- 实例化子类给父类构造函数传参
class Person {
late String name;
late num age;
Person(this.name, this.age);
void printInfo() {
print("${this.name}---${this.age}");
}
}
class Web extends Person{
late String sex;
Web(String name, num age,String sex) : super(name, age){
this.sex=sex;
}
run(){
print("${this.name}---${this.age}--${this.sex}");
}
}
main() {
Web w=new Web('张三', 12,"男");
w.printInfo(); // 张三---12
w.run(); // 张三---12--男
}
复写父类的方法
- @override 子类继承父类,子类中与父类相同的方法将会覆盖继承自父类的非静态方法
class Person {
String name;
num age;
Person(this.name, this.age);
void printInfo() {
print("${this.name}---${this.age}");
}
work() {
print("${this.name}在工作...");
}
}
class Web extends Person {
Web(String name, num age) : super(name, age);
// 子类自己的方法
run() {
print('run');
// 子类调用父类的方法
super.work(); // 李四在工作...
}
//覆写父类的方法
@override //可以写也可以不写 建议在覆写父类方法的时候加上 @override
void printInfo() {
print("姓名:${this.name}---年龄:${this.age}");
}
@override
work() {
print("${this.name}的工作是写代码");
}
}
main() {
Web w = new Web('李四', 20);
w.printInfo(); // 姓名:李四---年龄:20
w.work(); // 李四的工作是写代码
}