Flutter学习总结(七、Dart的类继承)

173 阅读2分钟

Dart的类继承

一起从0开始学习Flutter!

前面介绍了在Dart中的类和属性的写法已经特点,接下来学习它的继承、接口、抽象类的特点。 Dart也是单继承的方式,我们如果要继承其他的类需要在类名后面添加extends关键字。 在上节介绍的类里的Person作为父类,添加一个学生类:

class Student extends Person{//学生类继承了Person类的所有公有属性和方法
  String grader;
  Student({String name,String sex,int age = 15,this.grader}):super(name:name,sex:sex,age:age); //子类的构造方法,子类的构造方法里没有办法再添加新的代码了,只能给父类和自己的属性赋值了。
  //Student({String name,String sex,int age = 15,String grader}):this.grader = grader,super(name:name,sex:sex,age:age);  构造方法还可以这样写
  //覆写了Person类的call方法
  @override
  void call(){
    print("student name is $name,age is $age,grader is ${this.grader}");
  }
}

在main方法中的使用跟直接使用Person类的时候是一样的:

 var student = Student(name:"LiLei",grader: "七年级二班");
 student();//student name is LiLei,age is 15,grader is 七年级二班

在Dart也是有有抽象类的存在,与其他语音一样抽象类是无法直接被实例化的,我们需要创建一个类来实现抽象类中的方法。

class MathTeacher extends Teacher{
  MathTeacher({String name,String sex,int age}):super(name:name,sex:sex,age:age);
  @override
  void teach(){
    print("math teacher name is $name");
  }
}

abstract class Teacher extends Person{
  Teacher({String name,String sex,int age}):super(name:name,sex:sex,age:age);
  void teach();
}

不过有一个特别的使用,在Dart是没有interface的,可以使用抽象类来代替,还是用老师的例子,数学老师的工作是教数学。

abstract class Work{//创建一个抽象类来代替的interface
  void doWork();
}

class MathTeacher extends Teacher implements Work{//抽象类可以用来继承也可以用implements
  MathTeacher({String name,String sex,int age}):super(name:name,sex:sex,age:age);
  @override
  void teach(){
    print("math teacher name is $name");
  }
  void doWork(){//实现implements里的方法
    print("math teachers teach math");
  }
}

然后我们在main方法中调用老师work的方法。

Work work = MathTeacher(name:"张",sex:"female");
work.doWork();//math teachers teach math

当然我们使用普通的任何类都是可以当做接口类来使用的,但是我们需要重写原来类的所有属性和方法,所以一般情况我们还是使用一个抽象类来作为接口类。

在Dart中还有一个概念是Mixins,我们开始说了Dart也是单继承的,但是我们可以通过with关键字来将多个类的属性和方法合并到一个类中,如果出现同名方法则会根据with后跟的类的先后属性进行覆盖,with也是可以单独使用省略掉extends关键字。with的类当中不能有显示声明的构造方法并且只能是继承自Object。

class Test extends Test1 with Test2,Test3{//with多个类时中间用逗号分隔。

}
//class Test = Test1 with Test2,Test3;上面的代码可以简写成这样,看起来像把他们组合在了一起

class Test1{
  void test(){
    print("test1");
  }
}

class Test2{
  void test(){
    print("test2");
  }
}

class Test3{
  void test(){
    print("test3");
  }
}

在main函数中我们调用Test的test方法试一下

var test = Test();
test.test();//test3

看到结果是打印输出了我们最后一个with的方法。

接下来一起来学习Dart的异步操作