美文网首页
Dart类的继承及super的使用

Dart类的继承及super的使用

作者: 见字如晤一 | 来源:发表于2022-02-15 13:57 被阅读0次

    学习java时我们都知道面对对象的三大特性:封装 、继承、多态

    Dart中的继承是什么样的呢?

    Dart中的类的继承:  
        1、子类使用extends关键词来继承父类
        2、子类会继承父类里面可见的属性和方法 但是不会继承构造函数
        3、子类能复写父类的方法 getter和setter
    

    我们先来看一段代码:

    class Person {
      String name = "";
      late int age;
      late String _work;
    
      Person(String name) {
        this.name = name;
      }
    
      void setName(String n) {
        this.name = n;
      }
    
      set setAge(int age) {
        this.age = age;
      }
    
      //私有属性_work的setter和getter函数
      String get work => _work;
    
      set setWork(String value) {
        _work = value;
      }
    
      void working() {
        print("Person is working 姓名:$name -- 年龄:$age -- 工作:$_work");
      }
    }
    
    //当父类Person自定义了同名构造方法,那么默认的不带参数构造方法会被覆盖
    //此时定义的子类,必须声明一个构造方法,去调用super的构造方法
    //The superclass 'Person' doesn't have a zero argument constructor.
    // Try declaring a zero argument constructor in 'Person',
    // or declaring a constructor in Woman
    // that explicitly invokes a constructor in 'Person'.
    class Woman extends Person {
      Woman(String name, int age) : super(name) {
        this.name = name;
        this.age = age;
      }
    
      @override
      void working() {
        super.working();
        print("子类working");
      }
    
      @override
      set setWork(String value) {
        super.setWork = "子类工作";
      }
    }
    
    void main() {
      //虽然父类有只带参数name的构造函数,但是子类并没有继承
      //子类必须有调用supper构造方法的构造方法,默认无参数时是默认实现的
      var obj = Woman("李四", 20);
      obj as Person;
      obj.setWork = "王五";
      obj.working();
    }
    
    运行结果:
    
    Person is working 姓名:李四 -- 年龄:20 -- 工作:子类工作
    子类working
    

    通过上面的代码,我们总结得到:
    1、stter/getter方法,用编译器自动生产时,只有私有属性才能自动生成,且方法名是去掉下划线的同名方法。(私有属性是以下划线开头的属性)

    getter方法名后不需要加()

    2、公有属性自定义写setter方法时会发现,方法名不能同属性名一样。

    3、父类自定义了同名构造函数(带参),子类就必须明确定义一个至少带该参数的构造函数,并通过:super(参数)方式调用父类的构造方法。

    4、子类能够复写父类中的set/get方法。

    5、super关键字的使用:①调用父类有参构造方法。 ②覆写父类方法时,在子类中调用父类方法。

    相关文章

      网友评论

          本文标题:Dart类的继承及super的使用

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