C# 面向对象核心:一文吃透多态(静态多态 + 动态多态完整讲解)
前言封装、继承、多态是面向对象编程三大基石前面我们学习了封装隐藏数据、继承复用代码而多态是继承体系的最终落地也是让代码具备高扩展性的关键特性。很多初学者分不清静态多态与动态多态也不理解多态到底解决了什么开发痛点今天结合通俗易懂的比喻 完整可运行案例从零拆解多态全部知识点。一、什么是多态1. 通俗理解同一个类型不同行为多态字面含义多种形态。核心定义同一个父类引用指向不同子类实例调用同名方法时执行各自子类独有的逻辑。举个生活化例子所有酒水都属于 “酒”父类剑南春、五粮液、酒鬼酒都是酒的子类。plaintext酒 a 剑南春 酒 b 五粮液 酒 c 酒鬼酒编译时只知道变量是 “酒”只有运行时喝下去才能分辨具体是哪一款酒每一种酒口感不同对应代码里就是同名方法执行不同逻辑这就是多态。2. 专业定义程序中父类引用变量指向的具体对象、方法调用逻辑编译阶段无法确定运行时才判定。无需修改原有业务代码就能切换不同子类实现一套引用适配多种实体让程序拥有多种运行状态。二、为什么要使用多态从反面案例看懂痛点我们用 QQ 宠物场景举例直观感受没有多态时代码的缺陷。1. 初始版本无继承、无多态代码极度冗余分别创建猫、狗两个独立类各自拥有Eat()进食方法主人类需要单独写喂猫、喂狗两个方法。public class Cat { public string Name { get; set; } public int Health { get; set; } public void Eat() { Health 10; Console.WriteLine(喵喵喵~鱼很好吃,健康值10); } } public class Dog { public string Name { get; set; } public int Health { get; set; } public void Eat() { Health 15; Console.WriteLine(汪汪汪~骨头不错哦,健康值15); } } // 主人类 public class Lady { public string Name { get; set; } public Lady(string name) Name name; // 单独喂猫 public void FeedCat(Cat cat) cat.Eat(); // 单独喂狗 public void FeedDog(Dog dog) dog.Eat(); }调用测试static void Main(string[] args) { Lady lily new Lady(lily); Dog dog new Dog() { Name 大黄, Health 60 }; Cat cat new Cat() { Name 蓝猫, Health 50 }; lily.FeedDog(dog); lily.FeedCat(cat); }代码存在两大致命问题重复代码过多猫、狗都有Name、Health属性重复定义扩展性极差后续新增鸟类、兔子宠物必须修改Lady主人类新增FeedBird、FeedRabbit方法违背开闭原则。2. 第一次优化抽取父类抽象类复用重复代码把宠物共有属性、抽象进食方法抽成父类Pet猫狗继承并重写Eat()public abstract class Pet { public string Name { get; set; } public int Health { get; set; } // 抽象进食方法强制子类重写 public abstract void Eat(); } public class Cat : Pet { public override void Eat() { Health 10; Console.WriteLine(喵喵喵~鱼很好吃,健康值10); } } public class Dog : Pet { public override void Eat() { Health 15; Console.WriteLine(汪汪汪~骨头不错哦,健康值15); } }此时解决了代码重复问题但主人类FeedCat、FeedDog两个方法依然存在新增宠物仍要修改主人类扩展性问题没有根治。3. 终极优化引入多态一套方法适配所有宠物利用父类引用接收所有子类对象主人只保留一个通用喂养方法public class Lady { public string Name { get; set; } public Lady(string name) Name name; // 父类Pet作为参数兼容所有Pet子类 public void Feed(Pet pet) { pet.Eat(); } }测试调用static void Main(string[] args) { Lady lily new Lady(lily); Pet dog new Dog() { Name 大黄, Health 60 }; Pet cat new Cat() { Name 蓝猫, Health 50 }; // 同一个Feed方法分别调用Dog、Cat的Eat实现 lily.Feed(dog); lily.Feed(cat); }多态带来的核心优势高扩展性新增鸟类只需要新建Bird : Pet并重写Eat()主人类代码完全不用改动代码精简统一入口方法消除大量重复业务函数解耦上层主人类只依赖抽象父类不依赖具体猫狗子类降低代码耦合。

相关新闻

如何让Windows效率翻倍?PowerToys中文版教你解锁隐藏技能

如何让Windows效率翻倍?PowerToys中文版教你解锁隐藏技能

如何让Windows效率翻倍?PowerToys中文版教你解锁隐藏技能 【免费下载链接】PowerToys-CN PowerToys Simplified Chinese Translation 微软增强工具箱 自制汉化 项目地址: https://gitcode.com/gh_mirrors/po/PowerToys-CN 你是否曾想过,为什么别人…

2026/7/6 5:31:41阅读更多 →
Mermaid Live Editor终极指南:免费在线图表编辑神器,告别绘图烦恼

Mermaid Live Editor终极指南:免费在线图表编辑神器,告别绘图烦恼

Mermaid Live Editor终极指南:免费在线图表编辑神器,告别绘图烦恼 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/…

2026/7/6 0:29:27阅读更多 →
传统观念:牛市任何策略都赚钱。编程同一策略在牛,熊,震荡市分别回测,量化行情对策略有效性影响。

传统观念:牛市任何策略都赚钱。编程同一策略在牛,熊,震荡市分别回测,量化行情对策略有效性影响。

同一策略在牛、熊、震荡市分别回测工具(教学版) 定位:去营销化、中立、可教学、可扩展 ⚠️ 全文含免责声明与风险提示,不荐股、不承诺收益、不引导开户、无任何引流 一、实际应用场景描述 在智能证券投资课程中,策略在…

2026/7/6 2:37:02阅读更多 →
正则表达式字符串清洗实战:从原理到工业级工具包

正则表达式字符串清洗实战:从原理到工业级工具包

1. 项目概述:正则表达式不是“魔法咒语”,而是字符串清洗的手术刀 你有没有遇到过这样的场景:从网页爬下来一串文本,里面混着七八个连续空格、各种不可见的零宽字符、莫名其妙的HTML标签残留、中英文标点混用,甚至还有…

2026/7/6 10:45:51阅读更多 →
Linux防火墙端口管理:firewalld、iptables、ufw 3种方案深度对比与选择指南

Linux防火墙端口管理:firewalld、iptables、ufw 3种方案深度对比与选择指南

Linux防火墙端口管理:firewalld、iptables、ufw 3种方案深度对比与选择指南在Linux服务器管理中,防火墙配置是确保系统安全的关键环节。面对不同的发行版和业务需求,系统管理员常常需要在firewalld、iptables和ufw这三种主流防火墙工具之间做…

2026/7/6 10:45:51阅读更多 →
Python社交网络分析实战:从数据建模到业务决策的七道生死关

Python社交网络分析实战:从数据建模到业务决策的七道生死关

1. 这不是一张“关系图”,而是一张“影响力地图” 你打开微信通讯录,看到583个联系人;刷微博时,首页滚动着27个你关注的人发的动态;在LinkedIn上,系统提示“你和某位CTO有3度连接”。这些数字背后&#xff…

2026/7/6 10:45:51阅读更多 →
可视化指挥闭环:城市安防视频孪生时空感知技术详解

可视化指挥闭环:城市安防视频孪生时空感知技术详解

可视化指挥闭环:城市安防视频孪生时空感知技术详解摘要传统城市安防指挥体系存在视频孤岛、时空基准割裂、预警处置脱节、调度无空间量化支撑、事后复盘证据碎片化五大核心痛点,指挥链路停留在“看画面、接警情、人工派单”的线性被动模式,无…

2026/7/6 10:45:51阅读更多 →
R语言实现电力系统N-1事故分析与可视化告警

R语言实现电力系统N-1事故分析与可视化告警

1. 项目概述:用R语言做电力系统事故分析,不是写统计报告,而是给电网装上“压力测试仪” “Contingency Analysis using R”这个标题乍看像一篇计量经济学课后作业,但实际是电力系统运行调度领域一个极其硬核的工程实践任务。它不涉…

2026/7/6 10:45:51阅读更多 →
医疗内容营销:构建患者信任的临床级数字基建

医疗内容营销:构建患者信任的临床级数字基建

1. 项目概述:这不是“发软文”,而是重建医患关系的底层基建 “Why Content Marketing is Key to Developing Patient Trust”——这个标题乍看像一篇泛泛而谈的行业白皮书小节,但在我过去十年服务过83家医疗机构、独立诊所和健康科技初创公司…

2026/7/6 10:40:50阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/6 4:26:20阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/6 2:48:33阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/6 0:10:35阅读更多 →
Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 技术架构先行:官方接口的合规应用 你是否曾在BP阶段手忙脚乱&#x…

2026/7/6 0:03:39阅读更多 →
多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理 【免费下载链接】mRemoteNG mRemoteNG is the next generation of mRemote, open source, tabbed, multi-protocol, remote connections manager. 项目地址: https://gitcode.com/gh_m…

2026/7/6 0:03:39阅读更多 →
COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南在数据分析和处理领域,去重统计是最基础也是最频繁使用的操作之一。当数据量达到亿级规模时,不同的去重统计方法在性能上可能产生天壤之别。本文将基于 5 亿行数据的实…

2026/7/6 0:03:39阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/6 4:45:01阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/6 4:45:01阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/6 4:45:03阅读更多 →