Flutter/Dart - 类的继承

前言

Dart中的继承:

1.子类使用extends关键词来继承父类

2.子类会继承父类里面可见的属性和方法,但是不会继承构造函数

3.子类能复写父类的方法 getter和setter

简单继承

子类使用extends关键词来继承父类

class Person {
  String name = '张三';
  num age = 30;

  void printInfo() {
    print('${this.name}----${this.age}');
  }
}

class Web extends Person {}

main() {
  Web w = new Web();
  print(w.name);
  w.printInfo();
}

super关键词的使用

class Person {
  String name;
  num age;
  Person(this.name, this.age);
  void printInfo() {
    print('${this.name}----${this.age}');
  }
}

class Web extends Person {
  Web(String name, num age) : super(name, age);
}

main() {
  Web w = new Web('hhh', 12);
  w.printInfo(); // hhh--- 12
}

实例化子类给父类构造函数传参

子类里面可以扩展自己属性和方法

class Person {
  String name;
  num age;
  Person(this.name, this.age);
  void printInfo() {
    print('${this.name}----${this.age}');
  }
}

class Web extends Person {
  String sex;
  Web(String name, num age, String sex) : super(name, age){
    this.sex = sex;
  }
  run(){
    print("${this.name}---${this.age}---${this.age}");
  }

}

main() {
  Web w = new Web('hhh', 12, '女');
  w.run(); // hhh--- 12
}

实例化子类给命名构造函数传参

class Person {
  String name;
  num age;
  Person(this.name, this.age);
  Person.xxx(this.name, this.age); // 此处有修改
  void printInfo() {
    print('${this.name}----${this.age}');
  }
}

class Web extends Person {
  String sex;
  // 此处有修改
  Web(String name, num age, String sex) : super.xxx(name, age) {
    this.sex = sex;
  }
  run() {
    print("${this.name}---${this.age}---${this.age}");
  }
}

main() {
  Web w = new Web('hhh', 12, '女');
  w.run(); // hhh--- 12
}

覆写父类的方法

class Person {
  String name;
  num age;
  Person(this.name, this.age);
  void printInfo() {
    print('${this.name}----${this.age}');
  }

  work() {
    print('${this.name}----${this.age}');
  }
}

class Web extends Person {
  String sex;
  Web(String name, num age, String sex) : super(name, age) {
    this.sex = sex;
  }
  run() {
    super.work(); //子类调用父类的方法
    print("${this.name}---${this.age}---${this.age}");
  }

  // 覆写父类的方法
  @override // 可以写 可以不写
  void printInfo() {
    print('姓名:${this.name}----年龄${this.age}');
  }
}

main() {
  Web w = new Web('hhh', 12, '女');
  w.printInfo();
  w.run();
}

你可能感兴趣的:(Flutter/Dart - 类的继承)