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 Classes(类)、Constructors(

    一、Object(对象) Dart 是一个面向对象编程语言。 Dart支持基于 mixin 的继承机制(多继承)。...

  • Dart语言的继承

    类的定义 在Dart中定义一个类的方法如下 Dart类的三种继承方式 父类继承 extends 实现接口 impl...

  • flutter【7】dart语言--类

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

  • Dart入门01 -- 变量,常量,数据类型,类型转换

    Dart简介 Dart 是面向对象的、类定义的、单继承的语言,它的语法类似 C 语言,可以转译为 JavaScri...

  • Dart语法基础

    Dart语言学习需要明确的重要概念: Dart语言,一切实例皆对象,所有对象都继承自object。即便数字,函数和...

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

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

  • Dart语言

    Dart语言概览 一切皆对象,所有对象均继承自Object 虽然Dart是强类型语言,但是变量类型是可选的,因为D...

  • Dart基础(一)-变量、常量、数据类型

    简介:   Dart是谷歌开发的跨平台的计算机高级语言。Dart是面向对象的、类定义的、单继承的语言。它的语法类似...

  • Dart-04 类、对象、mixins

    Dart所有的东西都是对象,所有的对象都继承自Object类。Dart是一门使用类和单继承的面向对象语言,所有的对...

  • Dart类的基础知识(一)

    class DartBasicLei { //dart 也是面向对象的语言,所以也继承,封装,多态的属性 //...

网友评论

    本文标题:Dart语言的继承

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