Flutter学习-day06 Dart继承封装多态抽象

目录

抽象

继承

封装和多态

接口

测试类


如果要查看完整代码,这是链接可供参考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);