面向对象的三大特性:

  • 封装
  • 继承
  • 多态

dart 中类的继承:

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

简单继承

  1. // Person.dart
  2. class Person {
  3. String name;
  4. int age;
  5. Person(String this.name , int this.age);
  6. void printName(){
  7. print('name $name');
  8. }
  9. }
  10. // Cat.dart
  11. import 'Person.dart';
  12. class Cat extends Person{
  13. String color;
  14. // super 关键字 , 因为父类的构造函数是不能被继承的, 但是父类需要传递参数, 所以要使用初始化列表的方式调用父类的构造函数, 并传递参数。
  15. Cat(String name, int age , String this.color) : super(name, age);
  16. // Cat(String name, int age , String this.color) : super.c(name , age); 也可以调用父类的命名构造函数
  17. void say(){
  18. print('我是 $name ---- 我的颜色是 $color');
  19. }
  20. }
  21. // index.dart
  22. import 'lib/cat.dart';
  23. void main() {
  24. Cat cat = new Cat('小猫', 3, '白色');
  25. // 调用父类的方法
  26. cat.printName();
  27. // 调用自己的方法
  28. cat.say();
  29. }

复写父类的方法

  1. // 父类
  2. class Person {
  3. String name;
  4. int age;
  5. Person(String this.name , int this.age);
  6. void printName(){
  7. print('name $name');
  8. }
  9. void work(){
  10. print('$name 在工作');
  11. }
  12. }
  13. // 子类
  14. import 'Person.dart';
  15. class Cat extends Person{
  16. String color;
  17. Cat(String name, int age , String this.color) : super(name , age);
  18. void say(){
  19. print('我是 $name ---- 我的颜色是 $color');
  20. // 子类可以通过 super 关键字调用父类的方法
  21. super.work();
  22. }
  23. // 复写 父类的方法
  24. @override
  25. void printName() {
  26. print('$name ---- 复写父类的方法');
  27. }
  28. }
  29. // index
  30. import 'lib/cat.dart';
  31. void main() {
  32. Cat cat = new Cat('小猫', 3, '白色');
  33. cat.printName();
  34. cat.say();
  35. }