- 面向对象编程(OOP)的三个基本特征: 封装、继承、多态
- dart中类的默认构造函数,在实例化时会自动触发,
- dart中的类可以有多个构造函数,命名构造函数:
- 类中的getter和setter
- 静态成员 static (静态方法不能访问非静态成员,非静态方法可以访问静态成员)
- 对象操作符 is
.. 连缀
- 继承
- 子类通过extends继承父类,
- 子类会继承父类里面的属性和方法,但是不会继承构造函数
- 子类能复写父类的方法 getter 和 setter 通过super实现实例化子类的时候给父类传参
通过super在子类中调用父类的方法
- 抽象类 抽象类主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口
- 使用abstract 关键字定义
- 没有方法体的方法是抽象方法
- 如果子类继承抽象类,必须实现里面的抽象方法
- 如果把抽象类当做接口实现的话,必须得实现抽象类中定义的所有属性和方法
- 抽象类不能被示例化,只有继承他的子类可以
多态: 父类定义一个方法不去实现,让基础他的子类去实现,每个子类都有不同的表现
定义一个animal类,要求它的子类必须包含eat方法
- 接口 使用implements关键字进行实现
定义一个DB库,支持mysql、mssql,要求2个类都有同样的方法
-
extends 和 implements 区别: 1 如果要复用抽象类里面的方法,并且要用抽象方法约束子类的话,用extend 2 如果只是把抽象类当做标准的话用implement
-
一个类实现多个接口
- 实现类似一个类继承多个类的功能,用mixins, 关键字with
- 作为mixins的类只能继承自Object,不能继承其他类
- 作为mixins的类不能有构造函数
- 一个类可以mixins 多个mixins类
- 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
*/