带你读《深入浅出Dart》九、多态

简介: 带你读《深入浅出Dart》九、多态

九、多态

多态是面向对象编程的三大特性之一(封装、继承和多态)。在 Dart 中,多态表现为父类引用指向子类对象。这样,父类的引用就可以根据当前指向的子类对象,动态地调用其相应的方法,这是面向对象非常重要的一个特性。

 

abstract class Animal {
  void eat();}
class Cat extends Animal {
  @override
  void eat() {
    print('Cat eating...');
  }}
class Dog extends Animal {
  @override
  void eat() {
    print('Dog eating...');
  }}
void feedAnimal(Animal animal) {
  animal.eat();}
var cat = Cat();var dog = Dog();feedAnimal(cat);  // 输出 Cat eating...feedAnimal(dog);  // 输出 Dog eating...

 

在上述例子中,feedAnimal 函数接受一个 Animal 类型的参数,然而在运行时,这个参数可以是任何一个 Animal 的子类的实例。这就是多态的体现。

1.抽象类

在 Dart 中,抽象类是一种特殊的类,它不能被实例化。抽象类用于定义一些基本的结构,而具体的实现则由继承抽象类的子类来完成。抽象类使用 abstract 关键字来定义。

 

abstract class Animal {
  void eat();  // 抽象方法}
class Cat extends Animal {
  @override
  void eat() {
    print('Cat eating...');
  }}

在上述例子中,Animal 是一个抽象类,它定义了一个抽象方法 eatCat 类继承了 Animal 类,并提供了 eat 方法的具体实现。

2.接口

Dart 中没有专门的接口关键字,类可以作为接口被其他类实现。实现接口需要使用 implements 关键字。

class Animal {
  void eat() {
    print('Eating...');
  }}
class Cat implements Animal {
  @override
  void eat() {
    print('Cat eating...');
  }}

在上述例子中,Animal 类作为接口被 Cat 类实现。Cat 类需要提供 Animal 中所有方法的实现。

 

这样我们就初步介绍了 Dart 中面向对象编程的主要概念和用法。实际上,Dart 中面向对象的特性还有很多,例如工厂构造函数、静态成员、Mixins 等。这些内容需要我们在日常的学习和实践中不断深入理解和掌握。

 

相关文章
|
自然语言处理 运维 小程序
分享99个PHP源码,总有一款适合您
分享99个PHP源码,总有一款适合您
268 1
fbh
|
关系型数据库 MySQL 数据库
mysql数据库执行mysqladmin flush-hosts方法
当连接错误次数过多时,mysql会禁止客户机连接,这个时候有两个办法解决: 1.使用mysqladmin flush-hosts命令清除缓存,命令执行方法如下: 命令行或终端:mysqladmin  -u  root  -p  flush-hosts 接着输入root账号密码即可   2.
fbh
7683 0
|
Kubernetes 监控 调度
在 Kubernetes 中应该如何设置 CPU 的 requests 和 limits
在 Kubernetes 中应该如何设置 CPU 的 requests 和 limits
576 0
|
2月前
|
存储 安全 前端开发
CC&LG实践|基于 LangGraph 一步步实现 Claude-Code 核心设计
本文旨在深入剖析 Claude-Code 的核心设计思想与关键技术实现,逆向分析其功能模块,结合 LangGraph 框架的能力,系统性地演示如何从一个最基础的 ReAct Agent 出发,逐步构建一个功能完备的简版 Claude-Code。
1509 19
CC&LG实践|基于 LangGraph 一步步实现 Claude-Code 核心设计
|
消息中间件 运维 Serverless
商业版vs开源版:一图看懂云消息队列 RocketMQ 版核心优势
自建开源 RocketMQ 集群,为保证业务稳定性,往往需要按照业务请求的峰值去配置集群资源。云消息队列 RocketMQ 版 Serverless 实例通过资源快速伸缩,实现资源使用量与实际业务负载贴近,并按实际使用量计费,有效降低企业的运维压力和使用成本。
719 110
|
8月前
|
关系型数据库 MySQL 网络安全
如何在宝塔mysql修改掉3306端口
在宝塔面板管理MySQL时,默认使用3306端口。为提升安全或避免冲突,可修改端口。步骤如下:1. 登录宝塔面板;2. 进入数据库管理;3. 找到并编辑my.cnf配置文件,修改`port`值;4. 保存并重启MySQL服务;5. 开放防火墙新端口;6. 测试连接。具体命令和流程图详见正文。
723 1
|
缓存 编译器 API
C# 一分钟浅谈:Roslyn 编译器平台介绍
【10月更文挑战第27天】Roslyn 是 Microsoft 开发的开源编译器平台,支持 C# 和 VB.NET。它将编译过程分解为多个阶段,并提供丰富的 API 供开发者分析、生成和修改代码。本文介绍了 Roslyn 的基本概念、安装配置、基础示例和高级应用,帮助开发者更好地理解和使用这一强大工具。
248 0
|
XML 存储 前端开发
【Web 前端】HTML、XHTML、XML 有什么区别?
【4月更文挑战第22天】【Web 前端】HTML、XHTML、XML 有什么区别?
|
存储 SQL 算法
【案例实战】分布式应用下登录检验解决方案(JWT)
【案例实战】分布式应用下登录检验解决方案(JWT)
【案例实战】分布式应用下登录检验解决方案(JWT)
|
Web App开发 测试技术 API
WebGpu VS WebGL
首先是Web 和 WebGPU 上的图形简史.如果您还没有阅读,请阅读 - 这篇文章在很大程度上是从那篇文章开始的。我将介绍WebGPU在实践中与WebGL的比较,我在Web游戏引擎Construct中添加WebGPU支持时学到的东西,以及它对未来的意义。
420 0