前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Dart-类(下)

Dart-类(下)

原创
作者头像
杨不易呀
发布2024-01-02 00:59:58
1501
发布2024-01-02 00:59:58
举报
文章被收录于专栏:Flutter18杨不易呀Flutter18

前言

  • 经过上一篇的介绍,我们已经了解了类的基本使用,本篇将继续介绍类的一些特性
  • 本篇将介绍类的继承、多态、接口、混入等内容

继承与多态

  • Dart 中的继承和多态是面向对象编程的核心概念,它们允许你创建基于现有类的新类,并在子类中重写或扩展父类的行为
  • 这些概念在其他面向对象的语言中也存在,例如 JavaScript

Dart 中的继承

  • 在 Dart 中,继承是通过 extends 关键字实现的
  • 子类会继承父类的 属性方法
  • 可以使用 @override 注解来重写父类的方法
代码语言:js
复制
class Animal {
  void speak() {
    print("The animal makes a sound");
  }
}

class Dog extends Animal {
  @override
  void speak() {
    print("Bark!");
  }
}

void main() {
  var dog = Dog();
  dog.speak(); // 输出: Bark!
}

运行结果:

Dart 中的多态

  • 多态是面向对象编程中的一个概念,它允许你使用父类类型的引用来指向子类的对象
  • 意味着你可以用父类的形式来调用实现了该父类的任何子类的方法
代码语言:js
复制
Animal myAnimal = Dog();
myAnimal.speak(); // 输出: Bark!

JavaScript 中的继承和多态

  • JavaScript 也支持继承和多态,尽管其实现方式与 Dart 有所不同
  • 在 ES6 之前,JavaScript 通过 原型链 实现继承
  • ES6 引入了基于类的语法,使得继承更易于理解和实现
代码语言:javascript
复制
class Animal {
  speak() {
    console.log("The animal makes a sound");
  }
}

class Dog extends Animal {
  speak() {
    console.log("Bark!");
  }
}

const dog = new Dog();
dog.speak(); // 输出: Bark!

// 多态的体现
const myAnimal = new Dog();
myAnimal.speak(); // 输出: Bark!

主要差异

继承语法

  • Dart 和 JavaScript (ES6 及以后) 都使用 extends 关键字来实现继承
  • 在 Dart 中,你可以使用 @override 注解来明确表示方法重写

多态实现

  • 在 Dart 中,多态是一种自然且明确的概念,因为 Dart 是一种强类型语言
  • JavaScript 作为一种弱类型语言,也支持多态,但其实更多依赖于动态类型和原型继承

类型系统

  • Dart 是强类型语言,要求类型显式声明
  • JavaScript 是弱类型语言,类型是动态的

继承和多态使得代码更具可重用性和灵活性,同时也支持更好的封装和抽象。

接口和混入

如上是 Dart 和 JavaScript 中继承和多态的主要差异,接下来将介绍 Dart 中的接口和混入,在 Dart 中,接口(Interface)和混入(Mixin)是两个重要的概念,它们在提供代码的可重用性和灵活性方面起着关键作用。

这两个概念在 Dart 中的实现方式与其他语言有所不同。

Dart 接口

  • 在 Dart 中,任何类都可以作为接口使用
  • 不需要显式地定义接口,而是可以直接使用类作为接口
  • 当一个类实现另一个类(作为接口)时,它必须重写所有的方法
代码语言:js
复制
class Car {
  void drive() {
    print("Car is driving");
  }
}

class ElectricCar implements Car {
  @override
  void drive() {
    print("Electric Car is driving silently");
  }
}

void main() {
  var myCar = ElectricCar();
  myCar.drive(); // 输出: Electric Car is driving silently
}

运行结果:

Dart 混入

  • 混入(Mixin)是 Dart 中一个非常强大的特性,允许你在多个类层次结构中重用代码
  • 使用 mixin 关键字可以创建一个混入,它可以被其他类所使用,而不需要成为这些类的父类
代码语言:js
复制
mixin Electric {
  void recharge() {
    print("Recharging the electric vehicle");
  }
}

class Car {
  void drive() {
    print("Car is driving");
  }
}

class ElectricCar extends Car with Electric {
  @override
  void drive() {
    super.drive();
    recharge();
  }
}

void main() {
  var myECar = ElectricCar();
  myECar.drive(); // 输出: Car is driving
                  //       Recharging the electric vehicle
}

运行结果:

主要区别和特点

接口实现

  • Dart 中的接口是通过实现一个类来定义的
  • 任何类都可以作为接口
  • 实现一个接口意味着你需要重写接口中的所有方法

混入使用

  • 混入允许你在不同的类中重用代码,而不需要继承这些类
  • 使用 with 关键字可以将一个或多个混入应用到一个类上

灵活性和重用性

  • 混入增加了代码的灵活性和重用性,尤其是在创建具有共同行为但不共享公共父类的类时非常有用
  • 接口强制实现特定的方法集,提供了一种确保类遵守特定协议的方式

这些概念使 Dart 在处理多重继承和代码重用时非常灵活和强大

End

  • 如果你有任何问题或建议,欢迎在下方留言,我会尽快回复
  • 如果你觉得本文对你有帮助,欢迎点赞、收藏,你的支持是我写作的最大动力

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 继承与多态
    • Dart 中的继承
      • Dart 中的多态
        • JavaScript 中的继承和多态
          • 主要差异
          • 接口和混入
            • Dart 接口
              • Dart 混入
                • 主要区别和特点
                • End
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档