【问题标题】:why switch or if else statement is not considered polymorphic? [closed]为什么 switch 或 if else 语句不被认为是多态的? [关闭]
【发布时间】:2018-08-30 04:00:44
【问题描述】:

关于堆栈溢出的每个答案都提供了有关如何用多态替换 switch 或 if else 的信息,但是 switch, if else 构造也有助于提供对象在上下文和输入方面的不同行为。

为什么 if else,switch 不被视为多态性的一部分。

【问题讨论】:

标签: java oop


【解决方案1】:

当我们必须检查对象的类型以做出一些逻辑或行为决策时,条件就变成了一种代码味道。不管是if/else块的栈还是switch语句都没有关系。这违反了开闭原则

开闭原则规定实体(类、模块、函数等)应该对扩展开放,对修改关闭。这意味着这些实体将不允许对其源代码进行更改。

这可以通过抽象和多态来实现。

多态性优于条件

  1. 与其向对象询问其状态,然后基于此执行操作,不如简单地告诉对象它需要做什么并让它自己决定如何做会更容易。
  2. 删除重复代码。您摆脱了许多几乎相同的条件。
  3. 如果您需要添加一个新的执行变体,您只需添加一个新的子类而不触及现有代码(开放/封闭原则)。

【讨论】:

  • 是的 sundar 我同意你的观点,但我的问题不是如何用多态性替换开关,而是为什么不将开关视为多态性的一部分
  • @deshmanth - 这是因为他回答中的第一句话。需要测试对象类型的代码不是多态的。如果您引入了符合约定的新类型(例如,实现了Shape 接口的新类),您的switchif/else 语句将不再正常工作,直到您修改它以测试该新类型.这与多态性相反,它要求客户端代码只需要知道对象符合所需的接口(也称为合同)。
  • 感谢@TedHopp。这为我的问题提供了很好的见解。
【解决方案2】:

概念中的多态性允许对象保留其父类的行为和属性。进一步解释herehere

ifelseswitch 是过程代码结构。

两者没有共同点。

编辑:感谢@Ted Hopp,纠正我的帖子。

【讨论】:

  • 就 OP 而言,我认为他/她指的是代码,它执行切换逻辑,作为一种良好的 OOP 实践,建议在多态下进行重构。
  • 多态性与契约的一致性有关,与面向对象的编程无关。 OOP 使用继承来实现多态性,但在许多语言中,您可以发现在没有继承的情况下实现多态性。 OOP 和多态性是相关但不同的概念。
  • @TedHopp 由于问题被标记为java,因此很容易并且很可能是正确的,假设 OP 正在学习基于继承的多态性。
  • nope.polymorphism 使用方法重载
猜你喜欢
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-24
  • 1970-01-01
  • 2017-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多