基于多态的相关知识点(封装、继承、多态)
一、多态的基本概念1. 定义· 多态Polymorphism指同一操作作用于不同类的对象时可以有不同的解释和执行结果· 多种形态同一接口不同实现2. 分类· 编译时多态静态多态· 方法重载Overloading· 运算符重载· 运行时多态动态多态· 方法重写/覆盖Overriding· 基于继承和接口实现二、静态多态编译时多态1. 方法重载Overloadingjavaclass Calculator {// 方法名相同参数列表不同public int add(int a, int b) {return a b;}public double add(double a, double b) {return a b;}public int add(int a, int b, int c) {return a b c;}}2. 运算符重载部分语言支持cppclass Vector {public:Vector operator(const Vector other) {// 重载运算符}};三、动态多态运行时多态1. 方法重写/覆盖Overridingjavaclass Animal {public void makeSound() {System.out.println(动物发出声音);}}class Dog extends Animal {Overridepublic void makeSound() {System.out.println(汪汪汪);}}class Cat extends Animal {Overridepublic void makeSound() {System.out.println(喵喵喵);}}2. 实现条件· 继承关系· 方法重写· 父类引用指向子类对象向上转型javaAnimal myAnimal new Dog(); // 向上转型myAnimal.makeSound(); // 输出汪汪汪四、多态的实现机制1. 虚函数Ccppclass Base {public:virtual void show() { // 虚函数cout Base show endl;}};class Derived : public Base {public:void show() override {cout Derived show endl;}};2. 虚函数表vtable· C通过虚函数表实现动态绑定· 每个有虚函数的类都有一个虚函数表· 对象包含指向vtable的指针3. Java/C#的实现· Java中所有非private、非static、非final方法都是虚方法· 通过方法表实现· final关键字可以禁止方法被重写五、接口与抽象类的多态1. 接口多态javainterface Shape {double area();}class Circle implements Shape {public double area() {return Math.PI * radius * radius;}}class Rectangle implements Shape {public double area() {return width * height;}}// 使用Shape shape1 new Circle();Shape shape2 new Rectangle();2. 抽象类多态javaabstract class Employee {abstract double calculateSalary();}class Manager extends Employee {double calculateSalary() {return baseSalary bonus;}}六、多态的应用场景1. 设计模式中的应用· 工厂模式· 策略模式· 模板方法模式· 命令模式2. 实际应用java// 支付系统多态示例interface Payment {void pay(double amount);}class CreditCardPayment implements Payment {public void pay(double amount) {// 信用卡支付逻辑}}class PayPalPayment implements Payment {public void pay(double amount) {// PayPal支付逻辑}}class PaymentProcessor {public void processPayment(Payment payment, double amount) {payment.pay(amount); // 多态调用}}七、多态的优势1. 提高代码可扩展性· 新增子类不影响现有代码2. 提高代码复用性· 父类定义通用接口3. 提高代码灵活性· 运行时决定调用哪个方法4. 实现接口统一· 不同对象通过统一接口访问八、相关概念对比特性 重载 (Overload) 重写 (Override)发生位置 同一类中 父子类之间参数列表 必须不同 必须相同返回类型 可以不同 相同或协变访问权限 无限制 不能更严格发生阶段 编译时 运行时九、注意事项1. 构造器不能多态· 构造器是隐式static的不具备多态性2. 静态方法不能多态javaclass Parent {static void show() {System.out.println(Parent);}}class Child extends Parent {static void show() { // 隐藏不是重写System.out.println(Child);}}Parent p new Child();p.show(); // 输出Parent静态方法调用取决于引用类型3. 字段不能多态javaclass Parent {String name Parent;}class Child extends Parent {String name Child; // 隐藏父类字段}Parent p new Child();System.out.println(p.name); // 输出Parent十、面试常见问题1. 多态的实现原理是什么· C虚函数表· Java方法表2. 重载和重写的区别· 编译时 vs 运行时· 同一类 vs 继承关系· 参数列表不同 vs 相同3. 如何防止方法被重写· C使用final关键字C11· Java使用final修饰方法· C#使用sealed关键字4. 多态的性能影响· 轻微的性能开销虚函数调用· 现代优化技术如内联缓存减少了开销总结多态是面向对象编程的核心特性它通过· 静态多态提高代码的灵活性· 动态多态提高系统的扩展性和可维护性理解多态的关键在于掌握1. 向上转型2. 动态绑定机制3. 接口和抽象类的使用4. 多态在设计模式中的应用多态使得程序更加模块化降低了模块间的耦合度是构建大型、可维护软件系统的重要基础。

相关新闻

如何使用 C# 创建、修改和删除 Word 中的 VBA 宏(无需Microsoft Word)

如何使用 C# 创建、修改和删除 Word 中的 VBA 宏(无需Microsoft Word)

目录 为什么在 Word 中使用 VBA 宏? 配置 C# 环境以操作 Word VBA 宏 使用 C# 在 Word 中创建 VBA 宏 使用 C# 修改 Word 中的 VBA 宏 使用 C# 删除 Word 中的 VBA 宏 在 Word 中创建和编辑 VBA 宏的实用建议 总结 在处理 Word 文档时,VBA&#x…

2026/5/17 3:42:37 阅读更多 →
AI Agent记忆系统全解析:从基础到前沿,一篇带你掌握大模型记忆技术

AI Agent记忆系统全解析:从基础到前沿,一篇带你掌握大模型记忆技术

本文是一篇关于AI Agent记忆系统的权威综述,由NUS、人大、复旦等多所高校联合完成。采用"形态-功能-动力学"三维框架分析200论文,提出Token-level、Parametric、Latent三大记忆形态,取代传统二分法。系统阐述记忆形成、演化与检索的…

2026/5/17 3:42:36 阅读更多 →
Werkzeug 库详解

Werkzeug 库详解

1. 它是什么?Werkzeug 是一个为 Python 语言构建的综合性 WSGI(Web Server Gateway Interface)工具库。WSGI 可以理解为 Python Web 应用与 Web 服务器(如 Nginx、Apache)之间沟通的“普通话”标准协议。可以将 Werkze…

2026/7/4 21:21:36 阅读更多 →

最新新闻

2025年Nmap渗透测试实战指南:从基础扫描到高级规避技术

2025年Nmap渗透测试实战指南:从基础扫描到高级规避技术

1. 项目概述:为什么Nmap依然是渗透测试的基石如果你在网络安全这个行当里待过一阵子,或者哪怕只是刚入门,大概率都听过Nmap这个名字。它就像木匠手里的锤子,厨师手里的刀,是那种你明知道它“古老”,但每次开…

2026/7/5 0:17:44 阅读更多 →
WPF可视化设计工具终极指南:如何用WpfDesigner让界面开发效率提升3倍?

WPF可视化设计工具终极指南:如何用WpfDesigner让界面开发效率提升3倍?

WPF可视化设计工具终极指南:如何用WpfDesigner让界面开发效率提升3倍? 【免费下载链接】WpfDesigner The WPF Designer from SharpDevelop 项目地址: https://gitcode.com/gh_mirrors/wp/WpfDesigner 还在为WPF界面开发中的繁琐XAML代码而烦恼吗&…

2026/7/5 0:15:43 阅读更多 →
基于YOLOv8的猫狗品种识别系统开发实战

基于YOLOv8的猫狗品种识别系统开发实战

1. 项目概述:基于YOLOv8的猫狗品种识别系统这个项目本质上是一个计算机视觉领域的典型应用——利用YOLOv8目标检测算法实现猫狗品种的自动识别。我在实际部署中发现,相比传统图像处理方法,深度学习方案在复杂场景下的识别准确率能提升40%以上…

2026/7/5 0:13:42 阅读更多 →
从零实现SHA-1哈希算法:原理、代码与性能优化实战

从零实现SHA-1哈希算法:原理、代码与性能优化实战

1. 项目概述:从“知其然”到“知其所以然”的SHA-1实现之旅在信息安全领域,哈希算法扮演着数据完整性校验和数字签名的基石角色。SHA-1(Secure Hash Algorithm 1)作为曾经的主流算法,虽然因其安全性问题已不再被推荐用…

2026/7/5 0:13:42 阅读更多 →
SillyTavern企业级AI对话前端部署指南:5步构建高可用架构

SillyTavern企业级AI对话前端部署指南:5步构建高可用架构

SillyTavern企业级AI对话前端部署指南:5步构建高可用架构 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern SillyTavern作为面向高级用户的LLM前端界面,为企业AI对话系…

2026/7/5 0:11:41 阅读更多 →
AI开发实战指南:从大模型应用到Agent构建的技术栈与学习路线

AI开发实战指南:从大模型应用到Agent构建的技术栈与学习路线

最近和一位从卡内基梅隆大学(CMU)AI领域出来的资深科学家朋友深聊了一次,话题从AI的历史、当下的技术浪潮,一直延伸到我们开发者该如何应对。这次交流让我感触很深,也解答了我心中很多关于“AI现在到底在发生什么”的困…

2026/7/5 0:11:41 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻