抽象类
Dart抽象类主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口。
1、抽象类通过abstract 关键字来定义
2.抽象类不能被实例化,只有继承它的子类可以
3.抽象方法不能用abstract声明,Dart中没有方法体的方法我们称为抽象方法。
个人理解dart中的抽象类就是用来规定类中必须要实现的方法,感觉像其他语言中的接口
void main() { var person = new Student(); } abstract class Person { void run(); } class Student extends Person { run() {} }
例如以上代码,定义了Person的抽象类,抽象类中定义的run方法,如果类继承了Person抽象类型,那么必须实现run方法
接口
首先,dart的接口没有interface关键字定义接口,而是普通类或抽象类都可以作为接口被实现。
同样使用implements关键字进行实现。
1.dart中的类和接口是统一的,类就是接口
2.每个类都隐式的定义了一个包含所有实例成员的接口
void main() {} class Person { String name; int get age => null; void run() { print('run ....'); } } class Student implements Person { @override String name; @override // TODO: implement age int get age => 18; @override void run() { // TODO: implement run } }
以上代码Person定义为接口,和普通的类没有区别,Student使用了implements关键字继承了Person,那么Person就被当做是接口,Student中必须实现接口中的属性和犯法
注意点:
什么时候使用继承,什么时候使用接口
如果是复用已有类的实现,那么就使用extends,如果只是复用已有类的外在行为,那么就使用接口implements,最后建议使用抽象类的形式定义接口
例如:
abstract class Person { String name; void run(); } class Student implements Person { @override String name; @override void run() { // TODO: implement run } }
Mixins
mixins类似于多继承,是在多继承中重用代码的一种方式,使用关键字with
void main() { var d = D(); d.a(); } class A { void a() { print('a方法'); } } class B { void a() { print('B.a方法'); } void b() { print('b方法'); } } class C { void a() { print('C.a方法'); } void c() { print('b方法'); } } class D extends A with B, C { void d() { print('d方法'); } }
如果mixins混入的时候,with后面的类都有同一个方法,那么以最后一个类为准(也就是C中的a方法),如果自己的类中有方法,那么就不会混入其他方法
作为mixins的类不能声明显示的构造方法
发表评论
侧栏公告
寄语
譬如朝露博客是一个分享前端知识的网站,联系方式11523518。
热评文章
标签列表
热门文章
友情链接