当前位置: 首页>编程语言>正文

Dart语言的继承

类的定义

在Dart中定义一个类的方法如下

class Person extends Object{
  String name;
  num age;
  String sex = '男';  // 属性
  Person(this.name,this.age,this.sex); //构造方法

  List a = List();

  // 打印个人信息(对象方法)
  void printPersonInfo(){
    print("名字=$name  年龄=$age  性别=$sex");
  }
}

main() {
  Person p = new Person('小明', 20, '男');
  p.printPersonInfo();
}

// 打印结果
名字=小明  年龄=20  性别=男

Dart类的三种继承方式

  1. 父类继承 extends
  2. 实现接口 implements
  3. 多继承 mixins

直接继承 extends

  1. 直接继承和其它语言的子类继承于父类没有区别
  2. 子类具有父亲所有公开的属性和方法
  3. 需要实现构造方法
class XiaoMing extends Person {
  XiaoMing(String name, num age, String sex) : super(name, age, sex); 
}

main() {
  XiaoMing p = new Person('小明', 20, '男');
  p.printPersonInfo();
}

抽象类(implements)

  1. 抽象类的功能主要是定义标准,在dart中采有abstract关键字定义抽象类;
abstract class Person{
  String name;
  num age;
  String sex = '男';  // 属性

  // 实现方法体的方法,不是抽象方法
  void printPersonInfo(){
      print("名字=$name  年龄=$age  性别=$sex");
  }

  // 这是一个没有实现方法体的方法,在Dart中叫抽象方法,
  void drink();
}
  1. 抽象类不能实例化
// 此时Person类为抽象类,像下面的实例化会编译器会报错
Person p = new Person('小明', 20, '男');
  1. 继承于抽象类的子类必须实现抽象类的没有方法体的方法(抽象方法);
  2. Dart中的抽象类中没有方法体的方法我们称之为抽象方法;
class PersonA implements Person,Animal {
}

接口

在dart中没有专门定义接口的方法,定义接口和定义抽象类一样

多继承(mixins 混入)

  1. 作为mixins类只能继承于Object,不能继承于其它类;如果类继承于非Object类,with该类会报错,也就不能称之为mixins类;
  2. 作为mixins的类不能有构造函数
  3. 一个类可以with 多个 mixins类
  4. with关键字继承的类可以是抽象类,也可以是普通类,但这些类都只能继承于Object

思考题

  1. extends、with、implement 的区别
    1.1. extends只能继承于一个类;这个类可以是抽象类,也可以是普通类(对不对)
    1.2. implement用于实现接口,接口在dart中使用抽象类表示,implements一般用于实现抽象类的属性和方法
    1.3. with关键字只能继承于父类为Object的类
    1.4.

  2. 使用extends可不可以继承抽象类;

  3. 类A,with C类和D类,C类和D类中都有一个方法 printInfo,执行A类的printInfo,会执行那个类的;
    答案:会执行with类的顺序,with顺序在后面的方法会将前面的方法替换掉
    此处应该有例子

  4. 类A,继承于类Person, 并with于 C类和D类,person类、C类和D类中都有一个方法 printInfo,执行A类的printInfo,会执行那个类的;
    答案:会执行with类的顺序,with顺序在后面的方法会将前面的方法替换掉
    此处应该有例子

  5. mixins与真正的多继承有什么区别
    5.1. mixins只能继承于父类为Object 的类
    5.2 mixins 可以用with关键继承抽象类,也必须实现抽象类中抽像方法

  6. 对象使用with、implements、extends 继承后,该对象的类型都是什么?
    答案: 见代码

abstract class A {
 void printInfo(){
   print('我是ClassA');
 }
}

abstract class B {
 void test();
}

class C{

}
class D<T> extends B  with A implements C{
}

main(List<String> args) {
 D d = new D();
 // 三种粥承方式的类型
 print(d is D);
 print(d is A);
 print(d is B);
 print(d is C);

// 打印结果
 true
 true
 true
 true
}
  1. 抽像类能不能继承于抽像类?
    答案:可以,但是继承了抽象类的抽象类不能再作为mixins类

https://www.xamrdz.com/lan/52y2016241.html

相关文章: