没有指针和引用的多态性:一个神话
多态性是面向对象编程的一个基本方面,使代码能够针对对象表现出不同的行为不同的子类。然而,许多开发人员思考为什么多态性似乎需要使用指针或引用。
内存分配的欺骗性作用
“如果在堆上分配内存,你有动态绑定,”有人可能会想。虽然确实如此,但仅仅内存分配不足以实现多态性。举个例子:
Derived d; Base* b = &d;
这里,d 驻留在堆栈上,但多态性在 b 上无缝工作。这凸显了内存位置与多态性无关。
语义:多态性的关键
关键因素在于语义。当您创建基类指针或对派生类实例的引用时,您实际上保留了对派生类方法的访问权限。考虑:
Base c = Derived();
虽然 c 是 Base 的实例,但它不能表现出多态行为,因为它存储 Derived 对象的切片版本,失去了其派生类标识。
指针与引用
虽然指针和引用都建立了间接性,但指针提供了额外的灵活性。它们允许您指向任何类型的对象,包括基类和派生类。相反,引用只能绑定到特定类型的对象,限制了它们的多态能力。
结论
没有指针或引用的多态是一个误解。指针和引用的使用可确保编译器维护必要的类型信息,从而允许动态解析方法调用和代码中真正的多态行为。
以上是多态性可以在没有指针或引用的情况下存在吗?的详细内容。更多信息请关注PHP中文网其他相关文章!