(二十)Dart 中的多态

Dart 中的多态教程

一、多态的概念

多态是面向对象编程中的一个重要概念。它允许将子类类型的指针赋值给父类类型的指针,同一个函数调用会有不同的执行效果。换句话说,子类的实例可以赋值给父类的引用。多态的核心在于父类定义一个方法不去实现,让继承它的子类去实现,每个子类有不同的表现。

二、代码示例解析

(一)定义抽象类

abstract class Animal{eat();   //抽象方法 
}
  • 这里定义了一个抽象类 Animal,它有一个抽象方法 eat()。抽象类不能被实例化,它的作用是为子类提供一个统一的接口规范。子类继承抽象类后,必须实现抽象类中的抽象方法。

(二)定义子类

class Dog extends Animal{eat() {print('小狗在吃骨头');}run(){print('run');}
}
class Cat extends Animal{eat() {   print('小猫在吃老鼠');}run(){print('run');}
}
  • DogCat 都是继承自 Animal 类的子类。
  • Dog 类中,重写了 eat() 方法,使其输出“小狗在吃骨头”,并且添加了一个 run() 方法。
  • Cat 类中,重写了 eat() 方法,使其输出“小猫在吃老鼠”,同样添加了一个 run() 方法。

(三)多态的体现

main(){// Dog d=new Dog();// d.eat();// d.run();// Cat c=new Cat();// c.eat();Animal d=new Dog();d.eat();Animal c=new Cat();c.eat();}
  • main() 函数中,我们没有直接实例化 DogCat 类,而是通过将它们赋值给父类 Animal 类型的变量来体现多态。
  • Animal d=new Dog(); 这行代码中,虽然变量 d 的类型是 Animal,但它实际上指向的是一个 Dog 类型的对象。当我们调用 d.eat(); 时,输出的是“小狗在吃骨头”,这是 Dog 类中重写的 eat() 方法的实现。
  • 同样,Animal c=new Cat(); 这行代码中,变量 c 的类型是 Animal,但它指向的是一个 Cat 类型的对象。调用 c.eat(); 时,输出的是“小猫在吃老鼠”,这是 Cat 类中重写的 eat() 方法的实现。

三、总结

通过这个例子,我们可以看到多态的强大之处。它允许我们使用父类类型的变量来引用子类类型的对象,并且能够根据实际引用的对象类型调用相应的方法。这种特性使得代码更加灵活和可扩展,可以方便地添加新的子类而不需要修改现有的代码逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/899464.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++初阶】第12课—list

文章目录 1. list的构造2. list迭代器的常见接口2.1 list遍历的迭代器接口2.2 list修改数据的迭代器接口2.3 list排序、逆序、合并相关操作的成员函数 3. 模拟实现list3.1 模拟实现list的构造3.2 模拟实现list的尾插3.3 模拟实现迭代器iterator3.4 模拟实现list的插入删除3.5 模…

思维链技术(Chain-of-Thought, CoT)

思维链(Chain-of-Thought, CoT)是一种通过模拟人类逐步推理过程来提升大型语言模型(LLM)复杂任务表现的技术。其核心思想是让模型在生成最终答案前,先输出中间推理步骤,从而增强逻辑性和可解释性。 1. 基础…

谷粒微服务高级篇学习笔记整理---异步线程池

多线程回顾 多线程实现的4种方式 1. 继承 Thread 类 通过继承 Thread 类并重写 run() 方法实现多线程。 public class MyThread extends Thread {Overridepublic void run() {System.out.println("线程运行: " Thread.currentThread().getName());} }// 使用 pub…

Windows学习笔记(4)关于MITRE

基本术语 APT(威胁组,高级持续威胁) TTP(攻击目的技术过程,战术技术和程序) ATT&CK框架 网站 https://attack.mitre.org/ CAR知识库 MITRE Engage MITRE D3FEND 网址 https://d3fend.mitre.org/

Go 语言规范学习(2)

文章目录 VariablesTypesBoolean typesNumeric typesString typesArray typesSlice typesStruct typesPointer typesFunction typesInterface typesBasic interfacesEmbedded interfacesGeneral interfaces【泛型接口】Implementing an interface【实现一个接口】 Map typesCha…

创意 Python 爱心代码分享

创意 Python 爱心代码分享 在编程中,用代码表达创意和情感是一种非常有趣的方式。本文将分享几段用 Python 编写的爱心代码,涵盖简单到复杂的实现方式,适合初学者和进阶开发者。 1. 简单爱心图案 代码实现 print("\n".join([&qu…

NLP高频面试题(二十四)——RAG相关内容简介

检索增强生成(Retrieval-Augmented Generation,简称 RAG)是一种将信息检索与生成模型相结合的技术,旨在提升大型语言模型的响应准确性、相关性和时效性。通过在生成过程中引入外部知识,RAG 能够有效弥补 LLM 在知识局限…

Share01-WinCC文件越用越大?

为什么你们的经典WinCC项目在客户电脑上运行的越来越慢?为什么查询一个历史曲线慢的要死?为什么重启一下电脑画面都要怀疑人生?具体原因可能多种多样,但是极大可能是您的数据管理设置欠佳,那么闲话少叙,和小…

练习题:111

目录 Python题目 题目 题目分析 需求理解 关键知识点 实现思路分析 代码实现 代码解释 指定文件路径和名称: 定义要写入的内容: 打开文件并写入内容: 异常处理: 输出提示信息: 运行思路 结束语 Python题…

2025_0327_生活记录

昨晚正在玩手机,凌晨一点二十一分左右手机突然响起来,通知地震波将在5秒后到达海淀区。看着倒计时的数字不断减小,橙色预警页面不断闪动,床猛地摇了几下。那一刻,我的记忆被拉回了2008年。 上大学之前我在成都生活了1…

基于改进粒子群算法的多目标分布式电源选址定容规划(附带Matlab代码)

通过分析分布式电源对配电网的影响,以有功功率损耗、电压质量及分布式电源总容量为优化目标,基于模糊理论建立了分布式电源在配电网中选址定容的多目标优化模型,并提出了一种改进粒子群算法进行求解。在算例仿真中,基于IEEE-14标准…

雨云云应用测评!内测持续进行中!

大家好,时隔一个月,我们又见面了! 最近,雨云推出了新型云应用(RCA,Rainyun Cloud Application)。 通过云应用,你可以快速创建可以外部访问的应用,采用全新的面板和dock…

【研究方向】联邦|自然语言

联邦学习 Federated Learning,FL 分布式学习方案。 通过多个参与方(client) 联邦计算 Federated Computing 联邦计算(Federated Learning)是一种分布式 机器学习 方法,旨在解决数据隐私保护与数据孤岛问题。 图联邦 Graph Neural Networks,GNNs 图联…

【算法day25】 最长有效括号——给你一个只包含 ‘(‘ 和 ‘)‘ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。

32. 最长有效括号 给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 https://leetcode.cn/problems/longest-valid-parentheses/ 2.方法二:栈 class Solution { public:int longestValid…

C++编程学习笔记:函数相关特性、引用与编译流程

目录 一、函数的缺省参数 (一)全缺省参数 (二)半缺省参数 二、函数重载 (一)参数类型不同 (二)参数个数不同 (三)参数类型顺序不同 三、引用相关问题…

RPCGC阅读

24年的MM 创新 现有点云压缩工作主要集中在保真度优化上。 而在实际应用中,压缩的目的是促进机器分析。例如,在自动驾驶中,有损压缩会显着丢失户外场景的详细信息。在三维重建中,压缩过程也会导致场景数据中语义信息(Contour)的…

泛目录优化:无极泛目录优化网站,技术解析与风险控制指南

无极泛目录优化网站精简版 一、核心功能 无限层级目录:支持动态创建 5 级以上子目录,形成内容矩阵AI 内容生成:集成 GPT-4 接口,日均生产 10 万 原创度 70% 以上的页面SEO 智能检测:自动优化 TDK、URL 结构、图片属…

归档重做日志archived log (明显) 比redo log重做日志文件小

归档重做日志 (明显) 比重做日志文件小。 (文档 ID 1356604.1) 日志切换将由于以下原因发生: 1. 由于在重做日志文件已满之前强制创建存档而记录和设计的行为 SQL> alter system switch logfile;SQL> alter system archive log current;RMAN> backup ar…

645.错误的集合

import java.util.HashMap; import java.util.Map;/*** program: Test* description: 645 错误的集合* author: gyf* create: 2025-03-23 10:22**/ public class Test {public static void main(String[] args) {}public static int[] findErrorNums(int[] nums) {int[] arr n…

力扣刷题494. 目标和

494. 目标和 - 力扣(LeetCode) 方法一,暴力dfs 直接进行深搜查找出所有的情况,缺点严重超时,只能过20个案例 留一下超时的 class Solution {//首先定义全局变量int[] abs { 1, -1 }; //用来记录当前遍历的数的正…