首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

多态如何替换循环内的if-else语句?

多态是面向对象编程中的一个重要概念,它允许我们使用相同的接口来表示不同类型的对象。这样,我们可以在运行时根据对象的类型动态地调用不同的方法。这可以替代循环内的if-else语句,使代码更加简洁和可扩展。

以下是一个使用多态替换循环内的if-else语句的示例:

代码语言:java
复制
// 定义一个Animal类,包含一个makeSound方法
public abstract class Animal {
    public abstract void makeSound();
}

// 定义一个Dog类,继承自Animal类,并实现makeSound方法
public class Dog extends Animal {
    public void makeSound() {
        System.out.println("汪汪汪");
    }
}

// 定义一个Cat类,继承自Animal类,并实现makeSound方法
public class Cat extends Animal {
    public void makeSound() {
        System.out.println("喵喵喵");
    }
}

// 在主函数中,创建一个Animal类型的数组,存储Dog和Cat对象
public class Main {
    public static void main(String[] args) {
        Animal[] animals = new Animal[2];
        animals[0] = new Dog();
        animals[1] = new Cat();

        // 使用循环遍历数组,调用每个对象的makeSound方法
        for (Animal animal : animals) {
            animal.makeSound();
        }
    }
}

在上面的示例中,我们定义了一个Animal类,并使用抽象方法makeSound来表示动物发出声音的行为。然后,我们定义了两个子类Dog和Cat,分别实现了makeSound方法。在主函数中,我们创建了一个Animal类型的数组,存储了Dog和Cat对象。最后,我们使用循环遍历数组,调用每个对象的makeSound方法。由于我们使用了多态,因此在运行时会根据对象的类型动态地调用不同的方法,从而避免了使用循环内的if-else语句。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

三种方式,教你优雅替换if-else语句

来源:love1024.blog.csdn.net/article/details/104955363 场景 日常开发,if-else语句不少吧??...当逻辑分支非常多时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡,总想着解锁新姿势...:干掉过多if-else!!!...我天,太多if-else了……(看不清楚可以点击图片放大) 1.优先判断条件,不满足及时中断 这点非常容易理解,就是说在业务逻辑里面,先把不符合条件给先过滤掉,而不是层层嵌套if-else判断,结合代码图看一下...: 2.策略模式改造 先用策略模式替换掉文章开头讲到,用户充值后根据价格包(付多少钱)给用户增加VIP天数及抽检机会次数逻辑,我这里就简化成"根据-价格包区分给用户增加不同体育会员视频VIP

1.1K30

6个实例详解如何if-else代码重构成高质量代码

如果使用if-else,说明if分支和else分支重视是同等,但大多数情况并非如此,容易引起误解和理解困难。 是否有好方法优化?如何重构? 方法肯定是有的。...可以看到,最初版本if-else最深嵌套有三层,看上去逻辑分支非常多,进到里面基本都要被绕晕。其实,仔细想想嵌套if-else和最外层并没有关联性,完全可以提取最顶层。...:把if-else代码都封装成一个公共函数。...函数好处是屏蔽内部实现,缩短if-else分支代码。代码结构和逻辑上清晰,能一下看出来每一个条件功能。...针对状态处理型重构方法有两种:一种是把不同状态操作封装成函数,简短if-else代码行数;另一种是利用面向对象多态特性直接干掉了条件判断。

1.2K10
  • 【愚公系列】2021年12月 通用职责分配原则(六)-多态原则(Polymorphism Principle)

    GRASP软件设计模式包括9个模式:创建者、信息专家、低耦合、控制器、高聚、多态性、纯虚构、间接性、防止变异。...---- 提示:以下是本篇文章正文内容,下面案例可供参考 一、多态原则(Polymorphism Principle) (1)问题 1、如何处理基于类型不同选择? 2、如何创建可嵌入软件组件?...如果用if-else或switch-case等条件语句来设计程序,当系统发生变化时必须修改程序业务逻辑,这将导致很难方便地扩展有新变化程序。...另外对于服务器/客户端结构中可视化组件,有时候需要在不影响客户端前提下,将服务器一个组件替换成另一个组件。...此时可以使用多态来实现,将不同行为指定给不同子类,多态是设计系统如何处理相似变化基本方法,基于多态分配职责设计可以方便地处理新变化。

    18920

    代码重构(四):条件表达式重构规则

    一般拆分规则为:经if后复杂条件表达式进行提取,将其封装成函数。如果if与else语句块中内容比较复杂,那么就将其提取,也封装成独立函数,然后在相应地方进行替换。...在上述夸张Demo中一眼就能看出来如何进行重构了(在日常开发迭代中,因为业务逻辑复杂性或者多次迭代原因,往往不是那么一目了然)。接下来我们就要对不同条件,但返回相同结果部分进行合并。...标记变量一般是可以使用其他语句进行替换,可以使用break、return、continue等等,这个要根据具体情况而定。总之,代码中有标记变量不是什么好事情。...代码中有多层if-else嵌套会降低代码可读性以及可维护性,如果此时在加上for循环等等其他逻辑语句,想想都可怕。这种业务逻辑较强代码要慎重对待。...尽量不要将if-else进行嵌套,因为嵌套if-else确实不好理解,如果在出现bug时,更是不好定位bug。要记住,你写代码不是给机器看,而是给人看,这一点非常重要。

    1.6K90

    为什么我不建议你用 if-else

    如果使用 if-else,说明 if 分支和 else 分支重视是同等,但大多数情况并非如此,容易引起误解和理解困难。 是否有好方法优化?如何重构? 方法肯定是有的。...可以看到,最初版本 if-else 最深嵌套有三层,看上去逻辑分支非常多,进到里面基本都要被绕晕。其实,仔细想想嵌套 if-else 和最外层并没有关联性,完全可以提取最顶层。...:把 if-else 代码都封装成一个公共函数。...函数好处是屏蔽内部实现,缩短 if-else 分支代码。代码结构和逻辑上清晰,能一下看出来每一个条件功能。...针对状态处理型重构方法有两种:一种是把不同状态操作封装成函数,简短 if-else 代码行数;另一种是利用面向对象多态特性直接干掉了条件判断。

    2.1K20

    这满屏 if else,交接兄弟快被逼疯!

    如果使用 if-else,说明 if 分支和 else 分支重视是同等,但大多数情况并非如此,容易引起误解和理解困难。 是否有好方法优化?如何重构? 方法肯定是有的。...可以看到,最初版本 if-else 最深嵌套有三层,看上去逻辑分支非常多,进到里面基本都要被绕晕。其实,仔细想想嵌套 if-else 和最外层并没有关联性,完全可以提取最顶层。...:把 if-else 代码都封装成一个公共函数。...函数好处是屏蔽内部实现,缩短 if-else 分支代码。代码结构和逻辑上清晰,能一下看出来每一个条件功能。...针对状态处理型重构方法有两种:一种是把不同状态操作封装成函数,简短 if-else 代码行数;另一种是利用面向对象多态特性直接干掉了条件判断。

    37610

    一文回顾 Java 入门知识(中)

    首先是最最基础 Java 编码写法规则和结构,比如导图里:运算符、流程控制语句循环、数组和方法这些内容;而后面的面向对象、以及面向对象三大特点:封装、继承和多态则是偏向思维层面的内容,这就不单要求你掌握...主要有三种形式:if、if-else、switch-case,这三种在实际开发中都很常用,属于重点内容。...执行说明与应用场景: if条件:单 if 语句或多个单 if 语句连续判断 这种情况都有,程序在处理某个条件是否满足一个或多个条件 if-else:单独使用或复杂条件嵌套使用场景,处理某种业务多重判断中某个具体条件是否满足...方法 这块主要明白如何编写以及编写规则,方法之间调用和返回值,简单来讲,你会写各种方法即可,后面学了继承和多态,你就会对方法有更深入了解。 实际开发中,代码都是通过方法来完成。...该类对外开放程度如何? 该类要不要被继承? 该类变量是否需要N多个对象共享? 该类是否要有共享代码块?

    37010

    实例告诉你如何if-else 重构成高质量代码!

    如果使用 if-else,说明 if 分支和 else 分支重视是同等,但大多数情况并非如此,容易引起误解和理解困难。 是否有好方法优化?如何重构? 方法肯定是有的。...可以看到,最初版本 if-else 最深嵌套有三层,看上去逻辑分支非常多,进到里面基本都要被绕晕。其实,仔细想想嵌套 if-else 和最外层并没有关联性,完全可以提取最顶层。...:把 if-else 代码都封装成一个公共函数。...函数好处是屏蔽内部实现,缩短 if-else 分支代码。代码结构和逻辑上清晰,能一下看出来每一个条件功能。...针对状态处理型重构方法有两种:一种是把不同状态操作封装成函数,简短 if-else 代码行数;另一种是利用面向对象多态特性直接干掉了条件判断。

    59300

    兄dei,你代码需要优化了

    所以啊,我们要编写出优雅代码,方便你我他,岂不美哉? 下面分享一些我在开发中常用编码中小建议,如有不妥,欢迎大家一起交流学习。 卫语句语句,就是把复杂条件表达式拆分成多个条件表达式。...用map我还可以省去思考如何命名Class呢。但是从代码规范来说,这样代码设计不是更符合 Java 面向对象思想吗?...多态 Java 三大特性之一,多态,相信大家都不会陌生,多态好处就是根据对象不同类型采取不同行为。...我们常常在编写 switch 语句时候,如果改用多态,可以把每个分支,抽取到一个子类覆写函数中,这就更加灵活。...需要注意是,不是所有switch语句都需要这样替换, 在面对简单 switch语句,就不必要了, 避免过度设计嫌疑。

    30330

    【封装那些事】 未利用封装

    未利用封装 客户代码使用显式类型检查(使用一系列if-else或switch语句检查对象类型),而不利用出层次结构已封装类型变化时,将导致这种坏味。 为什么要利用封装?...一种臭名昭著坏味是,在客户代码中使用条件语句if-else或switch语句)来显式地检查类型,并根据类型执行相应操作。...相反,如果利用了运行时多态,完全可以避免这种问题。 未利用封装潜在原因 以过程型思维使用面向对象语言 开发时思维是以代码执行过程为导向,自然而然就会使用if-else语句和switch语句。...客户程序使用TYPEBYTE、TYPEUSHORT、TYPEINTDataBuffer来存储数据。 下面是客户程序示例,演示如何使用switch语句执行针对具体类型显式类型检查。...但是这样判断应该只有一处,负责日后代码维护是个灾难。 示例分析二 还是那句话switch-case语句if-else语句不可怕,可怕是多个witch-case语句if-else语句

    1.3K40

    【封装那些事】 未利用封装

    未利用封装 客户代码使用显式类型检查(使用一系列if-else或switch语句检查对象类型),而不利用出层次结构已封装类型变化时,将导致这种坏味。 为什么要利用封装?...一种臭名昭著坏味是,在客户代码中使用条件语句if-else或switch语句)来显式地检查类型,并根据类型执行相应操作。...未利用封装潜在原因 ###以过程型思维使用面向对象语言 开发时思维是以代码执行过程为导向,自然而然就会使用if-else语句和switch语句。...客户程序使用TYPE_BYTE、TYPE_USHORT、TYPE_INTDataBuffer来存储数据。 下面是客户程序示例,演示如何使用switch语句执行针对具体类型显式类型检查。...但是这样判断应该只有一处,负责日后代码维护是个灾难。 示例分析二 还是那句话switch-case语句if-else语句不可怕,可怕是多个witch-case语句if-else语句

    1.1K90

    Python需要学基础有哪些

    Python介绍 Python是一种广泛使用高级编程语言,因其简洁易读语法和强大功能而备受欢迎。本文将介绍一些Python教学内容,帮助初学者快速入门编程世界 1....以下是一些重要基础概念: 变量与数据类型: 学习如何声明变量以及Python中常见数据类型,如整数、浮点数、字符串等 条件与循环: 理解条件语句(如if-else)和循环语句(如for和while...),以便根据不同情况执行代码 函数: 学习如何定义和调用函数,以及函数在代码组织中作用 2....文件操作 学习如何在Python中进行文件读写操作,这在处理数据和持久化存储时非常重要 打开与关闭文件: 使用open()函数打开文件,并在操作结束后及时关闭 读写操作: 学习如何读取文件内容、...面向对象编程 理解面向对象编程(OOP)概念,这是一种组织和设计代码重要方法 类与对象: 学习如何定义类,并创建实例化对象,以及类属性和方法 继承与多态: 理解继承关系如何帮助重用代码,以及多态如何实现不同类统一接口

    17330

    分享 7 个优化代码技巧

    所以啊,我们要编写出优雅代码,方便你我他,岂不美哉? 下面分享一些我在开发中常用编码中小建议,如有不妥,欢迎大家一起交流学习。 卫语句语句,就是把复杂条件表达式拆分成多个条件表达式。...用map 我还可以省去思考如何命名Class呢。但是从代码规范来说,这样代码设计不是更符合 Java 面向对象思想吗?...多态 Java 三大特性之一,多态,相信大家都不会陌生,多态好处就是根据对象不同类型采取不同行为。...我们常常在编写 switch 语句时候,如果改用多态,可以把每个分支,抽取到一个子类覆写函数中,这就更加灵活。...需要注意是,不是所有switch语句都需要这样替换, 在面对简单 switch语句,就不必要了, 避免过度设计嫌疑。

    42110

    JavaScript 设计模式 —— 策略模式

    什么是策略模式 策略模式定义: 定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换 策略模式一般由两部分组成: 封装不同策略策略组(使得代码复用性、可扩展、可维护性提高,避免大量 CV 代码情况...return 'xxx.xxx.xxx.xxx'; } } 可以发现,这段代码存在着一些明显问题 Consul 函数过于庞大,不符合单一职责原则,难维护 堆砌了过多 IF-ELSE 语句,代码看起来比较冗余...(你不会直接 CV 吧 针对以上问题,我们可以利用策略模式加以优化 首先将各 LB 算法封装成独立函数,提高复用性 建立算法名称 -> 算法执行函数映射,干掉冗余 IF-ELSE(简直就是 IF-ELSE...策略模式定义了算法组,分别封装,它们之间可以相互替换,此模式变化独立于使用算法客户 多态常用继承、方法重写、父类引用指向子类对象等方法实现 策略模式强调是做同一件事不同且不重复方法 多态是一种语言机制...,有的不支持多态语言也一样要实现策略模式 策略处于程序设计层次,多态处于语言语法层次 总结 策略模式优点 策略模式利用组合、委托和多态等技术和思想,可以有效避免多重且冗余 IF-ELSE 策略模式提供了对开放

    42110

    新华三“智・行中国2022”|大厂行动,如何擘画“循环数字未来?

    不难发现,当国家重点构建循环框架搭上数字经济新引擎,我国经济发展就有了进一步清晰方向——助力国家循环建设,推动经济高质量发展就要大力发展数字经济,共谋数字未来。...01 数字经济驱动循环:与城市同行,共谋新未来 目前来看,循环建设对中国经济指向是明确且积极,其中一个显著特征即是在全国范围推动区域经济优势互补,形成经济资源合理分配、地区发展协同新格局...这是一个国家级别的算力资源跨域调配战略工程,算力资源将在全国范围东西部之间形成循环体系,并实现最大化利用,从而更好地为数字经济发展赋能。 同样,数字经济蓬勃发展也在助力循环建设。...如何发展好数字经济是一个关键性问题。在全国视角下,发展好数字经济就要与城市同行,解决区域发展不平衡问题。而在行业视角下,发展好数字经济又在于两个方向思考,一是与场景同行,二是与伙伴同行。...从小处着手,做强数字经济是实现国家循环体系建设一个有效路径。当大国循环体系得以完成,那么就具备了进一步拓展外循环基础与能力。

    48910

    Java——基础语法(一)

    if语句用于条件判断,switch语句用于多重分支,while循环和do…while循环用于循环操作,for循环则可以更加灵活地控制循环次数。 下面我将详细介绍Java中流程控制。...分支结构 在Java中,分支结构有两种方式:if-else语句和switch语句if-else语句if-else语句用于根据条件来执行不同代码块。...与if-else语句不同是,switch语句基于一个表达式值来选择要执行代码块。...当continue语句被执行时,程序会跳过本次循环剩余代码,直接进入下一次循环。...子类可以继承父类公有数据成员和成员方法,并且可以重写父类方法以实现特定需求。 - 多态多态是面向对象编程中一种特性,它允许不同对象对同一消息做出不同响应。

    11210

    【JAVA】Java中goto语句简介与使用(java 如何跳出内嵌多层循环方法)

    参考链接: Java是否支持goto 1.概述  这是我在看公司代码时候发现,居然有一个goto语句使用,所以来学习一下  goto语句在java中作为保留字,并没有实现它。...但在其他语言中(c语言),goto是个合法关键字 java中支持break和continue虽然能实现goto语句功能但是我个人总结他们用法大同小异  首先在java中对标号要求非常严格  标号必须在一个循环前面...,意思是这个循环名字叫outer(假设标号名为outer),并且这一行后面不能有任何语句了;  而break和continue是和循环语句结合使用,因此实际上语句标签使用也是和循环紧密结合。 ...语句标签在被使用情况,只能定义在循环迭代语句之前,否则编译出错  因此带标号break、continue 只能在循环体或者选择体(if等)之中跳转  而(c语言)goto用法则比较灵活,(c语言)...案例  转载:https://www.knowledgedict.com/tutorial/java-break-out-of-nested-loops.html java 如何跳出内嵌多重循环方法主要有两种

    3.9K20

    面向对象之特性

    面向对象之特性 A1 总述 封装、抽象、继承、多态 学习思路: 奥义+实现+意义 A2 封装(Encapsulation) 奥义: 信息隐藏或数据访问保护 类通过暴露有限访问接口,授权外部仅能通过类提供方式...类通过有限方法暴露必要操作,提高类易用性。 降低接口复杂度,提高类易用性。 解决问题: 没有封装的话,因为类属性都暴露,那么调用者要正确操作属性就需要堆业务和每个属性足够了解。...A3 抽象(Abstraction) 奥义: 隐藏方法具体实现 让调用者只关心提供功能,而不用知道这些功能是如何实现 实现: 接口类(如Java中interface关键字语法) 抽象类(如Java...建议: 多用组合少用继承 A5 多态(Polymorphism) 奥义: 子类可以替换父类 实现: 意义: 提高代码可扩展性和复用性 是很多设计模式、设计原则、编程技巧代码实现基础,比如策略模式、基于接口而非实现编程...、依赖倒置原则、里式替换原则、利用多态去掉冗长 if-else 语句等等。

    40120
    领券