gpt4 book ai didi

php - PHP中不使用父类时是否称为多态性?

转载 作者:行者123 更新时间:2023-11-28 04:46:07 25 4
gpt4 key购买 nike

在C++中,如果我想使用多态性,我会创建一个父类,然后从父类中派生出许多子类,然后我就可以将子类对象的地址赋给一个指针变量父类。

例如:假设我有一个名为Animal的父类,然后我从Animal派生了两个子类,它们是DogCat,这三个类都有一个名为 speak() 的方法。

现在我可以创建一个将 Animal* 作为参数的函数:

void foo(Animal* animal)
{
animal->speak();
}

并执行以下操作:

Cat *cat = new Cat();
Dog *dog = new Dog();
foo(cat);
foo(dog);

但是在 PHP 中,变量可以是任何类型,所以即使我没有父类 Animal 而只有 CatDog 类,我仍然可以执行以下操作:

function foo($animal)
{
$animal->speak();
}

$cat = new Cat();
$dog = new Dog();
foo($cat);
foo($dog);

那么不使用父类的时候还叫多态吗?

最佳答案

您在 C++ 中描述的多态性是子类型化(this linked Wikipedia article 中三种不同含义列表中的第三种)。

这也被描述为(至少在像 C++ 这样的静态类型语言中)动态多态性,因为重点是对象的“动态”(运行时)类型不同于接口(interface)的“静态”编译时类型.

您在 PHP 中讨论的是 duck typing ,这本质上是参数多态性的一种形式。

这大致等同于您从 C++ 中的模板获得的静态多态性,尽管实现方式显然非常不同。

关于php - PHP中不使用父类时是否称为多态性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49243705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com