Dart学习记录(二)——抽象类、多态、接口、mixins
1. 抽象类
1. abstract定义抽象类
抽象类中有抽象方法,子类必须包含该方法
abstract class Animal{ eat(); //抽象方法 run(); //抽象方法 printInfo(){ print('我是一个抽象类里面的普通方法'); } } class Dog extends Animal{ @override eat() { print('小狗在吃骨头'); } @override run() { // TODO: implement run print('小狗在跑'); } }
抽象类不能被实例化,只有继承它的子类可以
Animal a = new Animal()// 会报错
2. 多态
多态就是父类定义一个方法不去实现,让继承他的子类去实现,每个子类有不同的表现。
上面的例子就是多态。
3. 接口 implements
通过抽象类、普通类实现接口,使用关键字implements,一般使用抽象类(如果实现的类是普通类,会将普通类和抽象中的属性的方法全部需要覆写一遍)
abstract class Db{ // 当做接口 接口:就是约定 、规范 late String uri; //数据库的链接地址 add(String data); save(); delete(); } class Mysql implements Db{ @override String uri; Mysql(this.uri); @override add(data) { // TODO: implement add print('这是mysql的add方法'+data); } @override delete() { // TODO: implement delete return null; } @override save() { // TODO: implement save return null; } remove(){ } }
4. 多个接口 implements
class C implements A,B{ }
5. mixins 可以使用mixins实现类似多继承的功能
(1)作为mixins的类只能继承自Object,不能继承其他类
(2)作为mixins的类不能有构造函数
class C with A,B{ }class Person{
String name; num age; Person(this.name,this.age); printInfo(){ print('${this.name}----${this.age}'); } void run(){ print("Person Run"); } } class A { String info="this is A"; void printA(){ print("A"); } void run(){ print("A Run"); } } class B { void printB(){ print("B"); } void run(){ print("B Run"); } // 后面的会覆盖前面的类方法
} class C extends Person with B,A{ C(String name, num age) : super(name, age); }