目录
抽象
继承
封装和多态
接口
测试类
如果要查看完整代码,这是链接可供参考https://download.csdn.net/download/u010184528/12459239
抽象
abstract定义规则,子类继承父类,必须实现的方法
例如父类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 abstract class Person{
String name;
int age;
Person(this.name, this.age);
Person.second(this.name, this.age);
void show() {
print('$name $age');
}
//抽象方法定义规则,要求子类必须继承
void marry();
}
继承
子类继承父类,必须实现marry方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 class Boy extends Person{
double height;
Boy(String name, int age,double height):super(name,age){
this.height=height;
}
//方法重写
@override
void show(){
// super.show();
print('$name $age $height');
}
void playBoy(){
print('男生喜欢打王者荣耀');
}
@override
void marry() {
print('我是一个男生,要找一个女朋友结婚');
}
}
封装和多态
dart中的多态体现在方法重写,向上转型
比如上面Boy子类中的方法重写,我们也可以再定义一个Girl子类重写;
向上转型,向下转型这里做一个简单的介绍,具体代码可在我的资源中下载去看
向上转型可以提取公共方法,向下转型可以转化到子类,调用子类方法,向上转型也是一种封装
- A is B 判断A是否是B类型
- A as B 把A类型转换为B类型
1
2
3
4 if(p is Boy){
Boy boy=p as Boy;
boy.playBoy();
}
接口
dart中声明接口,和声明抽象类一样,都是用abstract修饰
1
2
3 abstract class Love{
makeLove();
}那么父类就可以继承该接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 abstract class Person implements Love{
String name;
int age;
Person(this.name, this.age);
Person.second(this.name, this.age);
void show() {
print('$name $age');
}
//抽象方法定义规则,要求子类必须继承
void marry();
@override
makeLove() {
print('男人和女人可以啪啪啪');
}
}
测试类
1
2
3 //父类引用子类对象
Person p1=new Boy('小明', 25, 175);
marryTest(p1);