【问题标题】:How does polymorphism promote extensibility? [duplicate]多态性如何促进可扩展性? [复制]
【发布时间】:2019-09-28 22:08:51
【问题描述】:

在学习 OOP 时,我遇到了 多态性 的概念。对于初学者来说,理解 多态性 可能会很棘手。现在我已经对继承子类化方法覆盖有了基本的了解,我仍然想了解多态性如何促进可扩展性?

【问题讨论】:

  • 调用多态行为的软件独立于消息发送到的对象类型,只要这些类型在相同的继承层次中。可以响应现有方法调用的新对象类型可以合并到系统中,而无需修改基本系统,除非必须修改实例化新对象的客户端代码以适应新类型。

标签: java polymorphism


【解决方案1】:

想想一个软件单元,它向外界公开一个简单的接口,一个接受超类型对象作为输入并在这个超类型对象上调用一些多态方法的方法。

public void baseUnitMethod(SuperType object) {
    object.polymorphicMethod();
}

现在让我们假设一开始客户端代码只使用这个SuperType的一个特定实现。为了这个例子,我将它命名为 OneSpecificType。到目前为止,我们的继承层次结构由一个基本 SuperType 和一个 OneSpecificType 组成,后者扩展了 SuperType 并为此 polymorphicMethod( )。最后,我们最简单形式的客户端代码可能会创建一个新的 OneSpecificType 并将其作为参数传递给单元。

SuperType oneSpecific = new OneSpecificType();
baseUnitMethod(oneSpecific);

多态性促进了可扩展性,这意味着我可以在我们的继承层次结构中引入其他特定类型的实现,并且将它们合并到我们的系统中所需的唯一更改是在客户端代码中,不需要对我们的基本单元进行任何更改。 我们调用多态方法的基本单元独立于对象类型当然考虑到所有这些类型都在同一个继承层次结构中。

客户端代码将导致两种特定类型

SuperType oneSpecific = new OneSpecificType();
baseUnitMethod(oneSpecific);

SuperType secondSpecific = new SecondSpecificType();
baseUnitMethod(secondSpecific);

基本单位将保持不变。

【讨论】:

    【解决方案2】:

    好吧,我不是 oop 方面的专家,我只是读了一点,这就是我所理解的。当您在强类型语言中声明变量时,您无法更改对象的类型,例如在 java 中,当您创建数组时,您必须声明数据的类型,一旦完成,您将无法插入任何其他数据类型(可能只是 null)。

    现在,假设您有一个名为vehicles 的类及其子类motorcycle、car 和bike,使用多态可以放宽对类型的限制,现在您可以将任何子类对象插入到数组中,cars、motorcycles 或bikes。

    您可以做的其他事情是创建能够接受超类的所有子类的函数,例如,假设您有类parking,使用多态性您可以将任何车辆对象传递给函数,您可以进行停车(汽车)、停车场(公共汽车)、停车场(宇宙飞船)等

    另一个优点是可以为子类添加特定方法,例如您可以在超类中声明方法驱动,然后在子类中指定驱动方法如何工作,即使您可以在超类中声明特定方法执行它,然后执行子方法。

    我知道的就这么多了,两年前学过oop,记不太清了,现在学函数式编程,也有多态性XD,也是一样,可以接受不同类型的数据关于函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-18
      • 1970-01-01
      • 1970-01-01
      • 2016-09-06
      • 2010-09-07
      • 2023-03-17
      • 2012-03-06
      • 1970-01-01
      相关资源
      最近更新 更多