面向对象中多态的理解

简介: 面向对象中多态的理解

面向对象三大特征:封装、继承、多态。

今天,我们来了解一下多态。

什么是多态

多态指同一个实体同时具有多种形式,指为不同数据类型的实体提供统一的接口。它是面向对象程序设计(OOP)的一个重要特征。

eg:品鉴师要品菜,一号厨师煮出了淮扬菜,二号厨师炒了东北菜。

多态的好处

主要是利于代码扩展

多态的类型

分为运行时的多态和编译时的多态

运行时的多态:通过覆写虚成员实现。直到系统运行时,才根据实际来决定实现哪种操作

编译时的多态:通过重载来实现。根据传递的参数、返回的类型等信息决定实现何种操作

结合设计模式

运算类(父类)

    public class Operation
    {
        private double _numberA = 0;
        private double _numberB = 0;
        /// <summary>
        /// 数字A
        /// </summary>
        public double NumberA
        {
            get
            {
                return _numberA;
            }
            set
            {
                _numberA = value;
            }
        }
        /// <summary>
        /// 数字B
        /// </summary>
        public double NumberB
        {
            get
            {
                return _numberB;
            }
            set
            {
                _numberB = value;
            }
        }
        /// <summary>
        /// 得到运算结果
        /// </summary>
        /// <returns></returns>
        public virtual double GetResult()
        {
            double result = 0;
            return result;
        }

加法、减法(子类)

    class OperationAdd : Operation//加法
    {
        public override double GetResult()//子类重写父类的方法
        {
            double result = 0;
            result = NumberA + NumberB;
            return result;
        }
    }
      class OperationSub : Operation//减法
    {
        public override double GetResult()
        {
            double result = 0;
            result = NumberA - NumberB;
            return result;
        }
    }

利用简单工厂实例化对象

public class OperationFactory
{
    public static Operation createOperate(string operate)
    {
        Operation oper = null;
        switch (operate)
        {
            case "+":
                {
                    oper = new OperationAdd();
                    break;
                }
            case "-":
                {
                    oper = new OperationSub();
                    break;
                }
        }
        return oper;
    }
}

main程序

static void Main(string[] args)
{
    Operation oper;
    oper = OperationFactory.createOperate("+");//通过简单工厂创建对象
    oper.NumberA = 1;
    oper.NumberB = 2;
    double result = oper.GetResult();
    Console.WriteLine(result);
}

所以通过上面的例子得出多态实现机制主要表现:在父类和继承该父类的一个或多个子类对某些方法的重写,多个子类对同一方法的重写可以表现出不同的行为。

相关文章
|
Linux 网络安全 Android开发
|
10月前
|
人工智能 安全 API
大模型推理主战场:通信协议的标配
DeepSeek加速了模型平权,大模型推理需求激增,性能提升主战场从训练转向推理。SSE(Server-Sent Events)和WebSocket成为大模型应用的标配网络通信协议。SSE适合服务器单向推送实时数据,如一问一答场景;WebSocket支持双向实时通信,适用于在线游戏、多人协作等高实时性场景。两者相比传统HTTPS协议,能更好地支持流式输出、长时任务处理和多轮交互,满足大模型应用的需求。随着用户体量扩大,网关层面临软件变更、带宽成本及恶意攻击等挑战,需通过无损上下线、客户端重连机制、压缩算法及安全防护措施应对。
1330 176
大模型推理主战场:通信协议的标配
|
9月前
|
数据采集 存储 监控
网站价格监控:动态价格数据的实时抓取案例
本案例展示了如何利用爬虫技术实时抓取京东等电商平台的商品信息、价格及用户评价,通过代理IP、Cookie和User-Agent确保数据稳定采集。关键数据分析包括价格动态监控、评价趋势分析和竞争情报获取,助力商家制定策略。代码从简单请求逐步演进为具备异常处理、数据解析等功能的完整体系,并设计了「技术关系图谱」,直观展示系统模块间的关系,为开发者提供全局视角和技术路径参考。
1353 0
网站价格监控:动态价格数据的实时抓取案例
|
9月前
|
弹性计算 安全 Linux
课时3:第3天:云服务器最基本操作——实例管理
大家好,欢迎收看玩转云服务器 ECS 系列课程,今天我们来学习第三课:云服务器最基本操作——实例管理。本节课程分为五个小结。 1. 实例有什么用? 2. 创建并登录实例 3. 启动与停止实例 4. 配置的升级与降级 5. 更换操作系统
194 0
|
10月前
|
小程序 测试技术 数据安全/隐私保护
微信公众号接口测试实战指南
微信公众号接口测试是确保系统稳定性和功能完整性的重要环节。本文详细介绍了测试全流程,包括准备、工具选择(如Postman、JMeter)、用例设计与执行,以及常见问题的解决方法。通过全面测试,可以提前发现潜在问题,优化用户体验,确保公众号上线后稳定运行。内容涵盖基础接口、高级接口、微信支付和数据统计接口的测试,强调了功能验证、性能优化、安全保护及用户体验的重要性。未来,随着微信生态的发展,接口测试将面临更多挑战和机遇,如小程序融合、AI应用和国际化拓展。
|
存储 安全 关系型数据库
FileZilla Server提权与常见问题
FileZilla Server提权与常见问题
1093 0
|
Python
pycharm2020无法打开,点击无反应
pycharm2020无法打开,点击无反应
354 0
|
消息中间件 物联网 网络性能优化
MQTT常见问题之MQTT的topic超出上限25个如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
机器学习/深度学习 人工智能 开发工具
机器学习PAI报错问题之配了tf_config开启训练报错如何解决
人工智能平台PAI是是面向开发者和企业的机器学习/深度学习工程平台,提供包含数据标注、模型构建、模型训练、模型部署、推理优化在内的AI开发全链路服务;本合集将收录PAI常见的报错信息和解决策略,帮助用户迅速定位问题并采取相应措施,确保机器学习项目的顺利推进。
|
消息中间件 存储 Java
Spring Boot 中的 RabbitMQ 消息发送配置
Spring Boot 中的 RabbitMQ 消息发送配置