美文网首页
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的使用

    学习java时我们都知道面对对象的三大特性:封装 、继承、多态 Dart中的继承是什么样的呢? 我们先来看一段代码...

  • ubuntu 下基于python深度学习

    一.python 的基本语法 <1>Python 类的定义、继承及使用对象 注意super()的使用,成员函...

  • 第十一章继承

    使用继承 父类 子类 子类访问父类成员 super 使用super 关键字,super代表父类对象 访问父类的构...

  • flutter【7】dart语言--类

    类 dart 是纯面向对象语言,每个对象都是某个类的实例,并且所有类都是继承自 Object。 dart中继承使用...

  • React

    super() / super(props) 子类继承父类的属性:需要使用super()继续父类的属性,同时创建t...

  • Dart语法基础之对象,接口,类以及多继承

    Dart语言特性 Dart是纯面向对象,基于类,使用可选类型支持混入式继承及Actor模式的并发编程语言。 万物皆...

  • super关键字继承树追溯

    super关键字的使用 ChildClass类 继承 FatherClass类 继承Object类形成一个追溯树 ...

  • 类的继承

    类的继承通过extends关键字,子类继承了父类的所有属性和方法 super关键字super() 作为函数使用su...

  • 类访问权限

    java中仅有单继承,没有多继承。 java中使用super来调用父类中的指定操作: super可以用于访问父类中...

  • Dart学习笔记——面向对象(二)

    继承 简单继承 Dart中的类的继承: 子类使用extends关键词来继承父类。 子类会继承父类里面可见的属性和方...

网友评论

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

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