class - 多态到底是什么?

标签 class oop object inheritance polymorphism

我试图准确理解 OOP 中的多态性意味着什么。我读过的所有教程都说几乎相同的事情:

“多态性是指,如果类 A 继承/扩展类 B,则 类 A 的对象可以被称为A类的对象或B类的对象。

因此,如果在游戏中我有多种类型的导弹,并且它们都扩展了 Missile 类,我可以创建一个 Missile 数组,它们都将是能够进入其中,因为它们都是Missile的类型,即使它们直接是SpeedMissileExlpodingMissile或其他什么。

这就是多态性的定义吗?这就是全部?它被认为是面向对象编程的主要原则,但不知何故我无法弄清楚为什么它如此重要。而且,本质上它只是继承原则的结果。那么为什么它如此重要?

最佳答案

Is this the definition of Polymorphism? Is that all?

是的,你说得完全正确。 仅此而已。有时简单的概念有听起来困难的名字。重要的是不要忘记这个术语是在 1967 年首次创造的。这意味着它是在计算机非常昂贵且难以理解主要由科学家操作的机器的时代发明的。

It is considered a primary principle in OOP, but somehow I can't figure out why it is so important. Also, essentially it's just a consequence of the inheritance principle. Then why is it so important?

假设您想发射您所说的所有导弹。在支持多态性的语言中,您可以简单地编写for(m in Missiles) m.fire()。在不支持的语言中,您必须单独发射每种类型的导弹,如 SpeedMissile.fireExlpodingMissile.fire ScudMissile.fire 不会是同一形式(变形)的多个(多)方法。

这对我来说似乎很重要。多态性是几乎所有的基础OO design patterns 。如果没有多态性,你就无法创建工厂、访问者、策略、适配器、访问者等。简而言之,没有多态性的 OOP 会很糟糕。

关于class - 多态到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21747176/

相关文章:

C++ 将对象写入文件然后再读入?

php - 如何在 PHP 中使用多个类

c++ - 在构造函数中调用纯虚函数会报错

c++ - 平方根算法 C++

java - 创建对象使 VM 更快?

ios - 不能从另一个类调用对象

c++ - 在 C++ 中将类变量传递给异常

c# - 如何在 C# 中存储类列表?

javascript - ES6 类中的 protected 属性(使用符号?)

python - 在 Django 模型中使用助手扩展功能的正确方法是什么?