Dart抽象类与接口入门:零基础Flutter教程
发表时间: 2020-08-04 06:06
Dart中抽象类: Dart抽象类主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口。
Dart中的抽象类可以理解就是用来规定类中必须要实现的方法,感觉像Java其他语言中的接口
extends抽象类 和 implements的区别:
abstract class Person { void run();// 抽象方法 必须实现 void sing(){// 不需要实现 }}class Man extends Person { run() {}}void main() { var person = new Man(); person.run(); // Person p=new Person(); //抽象类没法直接被实例化}
定义了Person的抽象类,抽象类中定义的run方法,如果类继承了Person抽象类型,那么必须实现run方法。
Datr中的多态:
允许将子类类型的指针赋值给父类类型的指针, 同一个函数调用会有不同的执行效果 。
子类的实例赋值给父类的引用。
多态就是父类定义一个方法不去实现,让继承他的子类去实现,每个子类有不同的表现。
abstract class Animal{ eat(); //抽象方法 }class Dog extends Animal{ @override eat() { print('小狗在吃骨头'); } run(){ print('run'); }}class Cat extends Animal{ @override eat() { print('小猫在吃老鼠'); } run(){ print('run'); }}main(){ // Dog d=new Dog(); // d.eat(); // d.run(); // Cat c=new Cat(); // c.eat(); Animal d=new Dog(); d.eat(); Animal c=new Cat(); c.eat();}
和Java一样,Dart也有接口,但是和Java还是有区别的。
首先,dart的接口没有interface关键字定义接口,而是普通类或抽象类都可以作为接口被实现。同样使用implements关键字进行实现。但是dart的接口有点奇怪,如果实现的类是普通类,会将普通类和抽象中的属性的方法全部需要覆写一遍。而因为抽象类可以定义抽象方法,普通类不可以,所以一般如果要实现像Java接口那样的方式,一般会使用抽象类。
建议使用抽象类定义接口。
此外,需要注意的是:
1.dart中的类和接口是统一的,类就是接口
2.每个类都隐式的定义了一个包含所有实例成员的接口
/*定义一个DB库 支持 mysql mssql mongodbmysql mssql mongodb三个类里面都有同样的方法*/abstract class Db{ //当做接口 接口:就是约定 、规范 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(){ }}class MsSql implements Db{ @override String uri; @override add(String data) { print('这是mssql的add方法'+data); } @override delete() { // TODO: implement delete return null; } @override save() { // TODO: implement save return null; }}main() { Mysql mysql=new Mysql('xxxxxx'); mysql.add('1243214');}