首页 > 其他分享 >多态真的有用吗?使用在哪些场景?

多态真的有用吗?使用在哪些场景?

时间:2023-11-13 19:32:36浏览次数:22  
标签:function 场景 有用吗 totalArea 多态 height width radius

多态是面向对象编程(OOP)中的一个重要概念,它能够增加代码的灵活性和可维护性。多态的主要思想是同一个方法名在不同的类中有不同的实现,或者说同一个接口可以有多个不同的实现方式。让我们通过一个生动的例子来说明多态的用途。

假设有一个图形类,其中包括圆形和矩形两个子类。每个图形都有一个计算面积的方法,但是计算面积的方式在圆形和矩形之间是不同的。

class Shape {
    // 通用代码
}

class Circle extends Shape {
    private $radius;

    public function __construct($radius) {
        $this->radius = $radius;
    }

    public function calculateArea() {
        return pi() * $this->radius * $this->radius;
    }
}

class Rectangle extends Shape {
    private $width;
    private $height;

    public function __construct($width, $height) {
        $this->width = $width;
        $this->height = $height;
    }

    public function calculateArea() {
        return $this->width * $this->height;
    }
}

现在,如果我们要计算一组图形的总面积,可以使用多态。我们可以定义一个通用的函数,该函数接受一个Shape对象数组,并计算它们的总面积。

function calculateTotalArea(array $shapes) {
    $totalArea = 0;

    foreach ($shapes as $shape) {
        $totalArea += $shape->calculateArea();
    }

    return $totalArea;
}

现在我们可以创建圆形和矩形对象,将它们放入数组中,然后使用calculateTotalArea函数计算它们的总面积,而无需关心具体是哪种图形。

$circle = new Circle(5);
$rectangle = new Rectangle(4, 6);

$totalArea = calculateTotalArea([$circle, $rectangle]);

echo "总面积是:" . $totalArea;

这里,calculateTotalArea函数是多态的体现。它能够接受不同类型的图形对象,而无需知道具体对象的类型。这使得代码更加灵活,当你需要添加新的图形类型时,无需修改已有的计算总面积的函数,只需创建新的图形类并实现calculateArea方法即可。

这种使用多态的方式让代码更具扩展性和可维护性,因为它将通用的操作和特定的实现解耦,使得系统更容易适应变化。

标签:function,场景,有用吗,totalArea,多态,height,width,radius
From: https://blog.51cto.com/u_14540126/8352192

相关文章

  • 华为认证 | 2023年了,考华为认证还有用吗?
    华为认证是华为技术有限公司推出的全球性认证体系,旨在为互联网行业提供最前沿的技术知识和实践经验。该认证涵盖了网络技术、云计算、大数据、人工智能等多个领域,为广大从业者提供了全面的技能提升机会。那么2023年了考华为认证还有用吗?下面我们就来了解一下吧。01什么是华为认证......
  • HyperLedger Fabric 1.2 区块链应用场景(3.1)
    比特币是区块链应用最早的场景,随着比特币安全稳定运行多年以后,数字货币的场景应用遍地开花,各种山寨币泛滥,通过ICO(InitialCoinOffering首次币发行)就能融到大量资金,上市后的数字货币就像股票一样可以进自由交易,这类应用主流称为区块链1.0。    技术人员通过对比特币等数......
  • Web漏洞-XSS实验-pikachu靶场5个场景(二)
    ★★实战前置声明★★文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。1、前言上一篇《Web漏洞-XSS理论和靶场小试牛刀(一)》已经介绍了XSS一些理论知识点,本文主要是分享p......
  • hmac使用场景及nodejs案例
    HMAC(Hash-basedMessageAuthenticationCode,基于哈希的消息认证码)是一种基于哈希函数的安全认证机制,用于确保数据的完整性和身份认证。它通过将密钥与消息进行哈希运算,生成一个固定长度的哈希值,用于验证数据的真实性和完整性。原理:使用一个密钥(Key)和一个哈希函数(如SHA-256)生成一个......
  • 虚拟机应用场景
    1、 演示环境,可以安装各种演示环境,便于做各种例子。2、保证主机的快速运行,减少不必要的垃圾安装程序,偶尔使用的程序,或者测试用的程序在虚拟机上运行。3、避免每次重新安装,银行等常用工具,不经常使用,而且要求保密比较好的,单独在一个环境下面运行。叩九九六三九四二九4、想测试一下不......
  • 虚拟机应用场景
    1、 演示环境,可以安装各种演示环境,便于做各种例子。2、保证主机的快速运行,减少不必要的垃圾安装程序,偶尔使用的程序,或者测试用的程序在虚拟机上运行。3、避免每次重新安装,银行等常用工具,不经常使用,而且要求保密比较好的,单独在一个环境下面运行。叩九九六三九四二九4、想测试一下不......
  • 场景题:海量数据如何判重?
    在海量数据如何确定一个值是否存在?这是一道非常经典的面试场景题。那怎么回答这个问题呢?接下来咱们就详细的聊一聊。参考答案判断一个值是否存在?通常有以下两种解决方案:使用哈希表:可以将数据进行哈希操作,将数据存储在相应的桶中。查询时,根据哈希值定位到对应的桶,然后在桶内进行查找......
  • 车联网场景中的MQTT协议应用
    基本概念解释MQTT解释MQTT(MessageQueuingTelemetryTransport)是一种轻量级、基于TCP/IP协议栈构建的异步通信,和发布-订阅模式的消息传输协议。适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境。它在物联网应用中广受欢迎,能够实现传感器、执行器和其它设备之间的高效通信......
  • 撒贝宁走进折叠宇宙:从折手机到折电视,玩转场景需求
    如果说过去几年折叠产品是少数人的玩具,那么今年,一个全民热捧的折叠宇宙正在形成。去年9月,央视名嘴撒贝宁拿着折叠手机,一屏看台本,一屏看新闻,掀起高端用户“折叠”潮流。今年,撒老师把可折叠激光电视“卷”进“新家”,从想用大屏激光电视看台本,到赏画、观影、娱乐,演绎出新时代人群对电......
  • 滚珠螺杆的精度和使用场景之间的关系?
    滚珠螺杆的精度和使用场景之间有着密切的关系,不同精度的滚珠螺杆被应用于不同的机械设备和制造工艺中,以满足不同的精度要求和生产效率。在机床加工行业中,高精度的滚珠螺杆被广泛应用于数控机床、加工中心和磨床等高精度加工设备中。这些设备需要将传动精度和稳定性达到较高的水平,以......