多态性如何促进可扩展性?

时间:2019-05-11 04:04:18

标签: java polymorphism

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

2 个答案:

答案 0 :(得分:1)

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

现在,假设您有一个名为Vehicles的类,并且它的子类是Motorcycle,Car和Bicycle,使用多态性可以放宽对类型的限制,现在您可以将任何子类对象插入数组,cars,mike或bikes。

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

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

这就是我所知道的,我在2年前就加入了,而且我没有太多的记忆,现在我正在学习函数式编程,并且XD也有多态性,同样,您可以接受不同类型的数据在功能上。

答案 1 :(得分: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);

,基本单元将保持不变。