对象继承
在Dart中可以使用extends实现继承
子类可以继承父类可见的属性和方法,不会继承构造反方
子类可以复写父类的方法,getter和setter
单继承,多态
对象中的override
override表示下面的代码是复写父类的方法,例如现在有两个文件person.dart表示父类,main.dart表示子类文件
person.dart代码:以_开始的变量名代表私有的,不可被继承,子类不可被访问,定义了两个成员name和age,还有一个判断是否大于18岁的方法,这个方法下面子类将会重写它
class Person { String name; int age; String _birthday; bool get isAdult => age > 18; void run() { print('Person run ...'); } }
main.dart代码:
import 'person.dart'; void main() { var study = Student(); study ..name = 'peter' ..age = 20; study.study(); study.run(); print(study.isAdult); } class Student extends Person { void study() { print('Student study ...'); } @override bool get isAdult => age < 18; } 子类中的@override表示下面的一行代码复写父类的get或者set或者方法,在子类中super代表父类
继承中的构造方法
1.子类中的构造方法会调用父类中无名无参的构造方法
2.如果父类没有无名无参的构造犯法,则需要显示调用父类的构造方法
3.在构造方法参数后使用:显示调用父类的构造方法
void main() { var student = Student('peter', 20); print(student.age); } class Person { String name; //无名构造方法 Person(this.name); //有名称有参数的构造方法 Person.withName(this.name); } class Student extends Person { int age; //子类构造方法调用父类无名构造方法 // Student(String name,this.age) : super(name); //子类构造方法调用父类有名构造方法 Student(String name, this.age) : super.withName(name); }
这种初始化成员
构造方法的执行顺序:
1.父类构造方法在子类构造方法体开始前执行
2.子类如果有初始化列表,子类初始化列表在父类构造方法前执行
例如:
Student(String name, int age): age = age, super.withName(name);
上面代码意思是Student继承的是Person,其中Person有一个成员是name,Student有一个成员是age,在实例化的时候先初始化Student,在初始化父类
子类初始化必须放在super的前面
发表评论
侧栏公告
寄语
譬如朝露博客是一个分享前端知识的网站,联系方式11523518。
热评文章
标签列表
热门文章
友情链接