Dart 基础5 —— 对象、类

122 阅读2分钟
  • 面向对象编程(OOP)的三个基本特征: 封装、继承、多态

image.png

image.png

  • dart中类的默认构造函数,在实例化时会自动触发,

image.png

  • dart中的类可以有多个构造函数,命名构造函数:

image.png

  • 类中的getter和setter

image.png

  • 静态成员 static (静态方法不能访问非静态成员,非静态方法可以访问静态成员)

image.png

  • 对象操作符 is

image.png .. 连缀

image.png

  • 继承
  1. 子类通过extends继承父类,
  2. 子类会继承父类里面的属性和方法,但是不会继承构造函数
  3. 子类能复写父类的方法 getter 和 setter 通过super实现实例化子类的时候给父类传参

image.png

image.png

通过super在子类中调用父类的方法

image.png

  • 抽象类 抽象类主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口
  1. 使用abstract 关键字定义
  2. 没有方法体的方法是抽象方法
  3. 如果子类继承抽象类,必须实现里面的抽象方法
  4. 如果把抽象类当做接口实现的话,必须得实现抽象类中定义的所有属性和方法
  5. 抽象类不能被示例化,只有继承他的子类可以

多态: 父类定义一个方法不去实现,让基础他的子类去实现,每个子类都有不同的表现

定义一个animal类,要求它的子类必须包含eat方法

image.png

  • 接口 使用implements关键字进行实现

定义一个DB库,支持mysql、mssql,要求2个类都有同样的方法

image.png

  • extends 和 implements 区别: 1 如果要复用抽象类里面的方法,并且要用抽象方法约束子类的话,用extend 2 如果只是把抽象类当做标准的话用implement

  • 一个类实现多个接口

image.png

  • 实现类似一个类继承多个类的功能,用mixins, 关键字with
  1. 作为mixins的类只能继承自Object,不能继承其他类
  2. 作为mixins的类不能有构造函数
  3. 一个类可以mixins 多个mixins类
  4. mixins不是继承,不是接口,是一种全新的特性
class Person{
  String name;
  num age;
  Person(this.name, this.age);
  getInfo() {
    print('${this.name} ---- ${this.age}');
  }
}

class A {
  String info = "this is A";

  void add() {
    print('add');
  }

  void run() {
    print('a--run');
  }
}

class D {
  void delete() {
    print('delete');
  }

  void run() {
    print('d--run');
  }
}

class C extends Person with A, D {
  C(String name, int age) : super(name, age);
}

void main() {
  C c = new C('zs', 18);
  c.add();
  c.delete();
  c.run();
  print(c.info);
  c.getInfo();
  print(c is C);
  print(c is A);
  print(c is D);
  print(c is Person);
  print(c is Object);
}


/** 打印的结果
add
delete
d--run
this is A
zs ---- 18
true
true
true
true
true
*/