07Dart 类的继承

本篇从大地老师《Dart 入门实战教程》学习整理而来。

  1. 子类使用extends关键词来继承父类
  2. 子类会继承父类里面可见的属性和方法 但是不会继承构造函数
  3. 子类能复写父类的方法 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(); // 李四的工作是写代码
}
原文地址:https://www.cnblogs.com/johu/p/15704074.html