Dart语言的继承

作者: 罗乐萌m | 来源:发表于2019-11-04 20:13 被阅读0次

    类的定义

    在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类

    相关文章

      网友评论

        本文标题:Dart语言的继承

        本文链接:https://www.haomeiwen.com/subject/ksbdbctx.html