Dart学习笔记(十四)

55 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

Dart 类的继承 实例化子类给命名构造函数传参

面向对象的三大特性: 封装、继承、多态

Dart中的类的继承

  1. 子类使用extends关键字来继承父类
  2. 子类会继承父类里面可见的属性和方法 但是不会继承构造函数
  3. 子类能复写父类的方法 getter和setter

注意: 最新版本的dart中需要初始化不可为null的实例字段,如果不初始化的话需要在属性前面加上late

class Person {
 
  String name;
 
  int age;
 
  Person.xxxx(this.name, this.age);
 
  void printInfo() {
 
    print('${this.name} ------ ${this.age}');
 
  }
 
}
 
class Web extends Person {
 
  late String sex;
 
  Web(String name, int age, String sex) : super.xxxx(name, age) {
 
    this.sex = sex;
 
  }
 
  run() {
 
      print('${this.name} ------ ${this.age} ------ ${this.sex}');
 
  }
 
}
 
main() {
 
  // Person p = new Person('张三', 21);
 
  // p.printInfo(); // 张三 ------ 21
 
 
 
  // Person p1 = new Person('李四', 31);
 
  // p1.printInfo(); // 李四 ------ 31
 
 
 
  Web w = new Web('王五', 37, '男');
 
  w.printInfo(); // 王五 ------ 37
 
  w.run(); // 王五 ------ 37 ------ 男
 
}

Dart 类的继承 子类覆写父类的方法

面向对象的三大特性: 封装、继承、多态

Dart中的类的继承

  1. 子类使用extends关键字来继承父类
  2. 子类会继承父类里面可见的属性和方法 但是不会继承构造函数
  3. 子类能复写父类的方法 getter和setter
class Person {
 
  String name;
 
  int age;
 
  Person(this.name, this.age);
 
  void printInfo() {
 
    print('${this.name} ------ ${this.age}');
 
  }
 
  work() {
 
    print('姓名: ${this.name}');
 
  }
 
}
 
class Web extends Person {
 
  Web(String name, int age) : super(name, age);
 
  run() {
 
    print('run');
 
    /** 子类调用父类方法 */
 
    super.work();
 
  }
  // 覆写父类方法
 
  @override // 可写可不写 建议在覆写父类方法的时候加上
 
  void printInfo() {
 
    print('姓名: ${this.name} ------ 年龄: ${this.age}');
 
  }
 
 
 
  @override
 
  work() {
 
    print('${this.name}的工作是写代码');
 
  }
 
}
 
main() {
 
  Web w = new Web('王二', 20);
 
  w.printInfo(); // 姓名: 王二 ------ 年龄: 20
 
  w.work(); // 王二的工作是写代码
 
  w.run(); // 姓名: 王二
 
}