`

多态知多少

阅读更多
今天看书,看到了这一句:The ability to implement polymorphism through functional overloading is not supported by PHP and probably never will be.
作为从c++开始学习面向对象的程序员,第一反应就是这个是不是说错了,通过函数重载来实现多态?我当时也大大的sb了一把,以为是印错了,或者说错了。然后在网上搜了一下多态,在有些语言中函数重载(函数名相同,参数不同的)也被称为函数的多态,理由是函数名相同,但可以表现出多种行为,自然符合多态的含义。
又从wiki查了一下多态有两种类型ad-hoc polymorphism和parametric polymorphism。ad-hoc polymorphism通过子类化和方法覆写来实现的,也就是面向对象方面的概念,而parametric polymorphism就是c++中的泛型编程,根据传递的类型参数来表现出多态。
我感觉这ad-hoc polymorphism通过子类化和方法覆写来实现的这个其实说的并不准确,这是针对静态语言来说的,在动态语言中,多态不是靠类型和继承来是实现的:
静态语言和动态语言的多态:
在静态语言中的概念中类即类型,接口即亦即类型,类型在多态中起到了重要的作用,类型决定了对象的行为。
在动态语言中类不是类型,类型是由行为决定的,这就是所谓的Duck Type的概念,能像鸭子一样行走,像鸭子一样叫的,就被称为鸭子类型。动态语言,语言是弱类型的,编译器/解释器不会检参数传递的是不是那个类型,而只会在在实际使用的时候检查是否具有这个行为。所以在动态语言中多态不是由类型决定的。在动态语言中接口的概念通常是不需要的(php5具有接口这个概念,这是在动态语言中少有的),既然这样,接口其实不是一个面向对象所必须的概念。因为在动态语言中你不能够通过接口来达到契约的作用,不需要需要通过接口编程来达到可插拔的替换掉实现的目标(在静态的面向对象语言中一直倡导的面向接口编程,这个东东其实和“面向抽象而不是具体编程”还是不一样的,他只是在静态类型的面向对象的一种表现,而“面向抽象而不是具体编程”则是一个原则高度上的东西。)。既然多态不靠类型来实现,所以也不依赖继承来实现。
1
1
分享到:
评论

相关推荐

    平时作业继承派生多态的练习

    在VC6.0 或者VS2008、VS2010、vs2012、vs2013 下建立win32 control application 项目, 在完成下列项目。在其过程中学习类、对象的基本编程方法,同时巩固C 语言课程学习的基本编程知 识。

    基于多态的职工信息管理系统设计源码

    本项目是一个基于多态的职工信息管理系统设计源码,共包含37个文件,其中包括6个TLOG文件、6个OBJ文件等。系统采用了C/C++技术,为用户提供了一个便捷的职工信息管理解决方案。系统设计注重用户体验和响应速度,采用...

    混合存储必知四件事

    混合存储是结合了传统硬盘驱动器(HDD)和固态驱动器(SSD)技术的一种存储解决方案,旨在通过将两种存储介质的优势结合起来,提供性能和成本的平衡。了解混合存储对于IT专业人员至关重要,尤其是在数据量日益增长且...

    c++必知必会 英文版

    《C++必知必会》是一本广受欢迎的C++编程教材,英文版更是许多程序员学习C++的首选。这本书深入浅出地介绍了C++语言的基础知识和核心概念,旨在帮助读者快速掌握C++编程技能。以下是根据标题、描述和标签提炼的一些...

    C++必知必会.pdf

    "C++必知必会"这本书通常会涵盖C++语言的基础到进阶内容,帮助读者深入理解和掌握C++的核心概念和技术。 首先,C++的基础知识包括基本语法和数据类型。C++支持基本的数据类型,如整型(int、short、long等)、浮点...

    《Java面试必知必会2.0》Night主题.pdf

    《Java面试必知必会2.0》是针对Java求职者的一份重要参考资料,它涵盖了Java面试中的核心知识点。以下是一些关键要点的详细解析: 1. **Java语言的三大特性**: - 封装:封装是面向对象的基础,通过设置访问权限...

    小白 的 Java面试必知必会系列.rar

    多态:多态的本质就是一个程序中存在多个同名的不同方法,主要通过三种方式来实现: 通过子类对父类的重写来实现 通过在一个类中对方法的重载来实现 通过将子类对象作为父类对象使用来实现 关于封装 封装主要是为了...

    C++必知必会_c++类型转换_C++字符pdf_Vc_

    本篇内容将详细解析C++中的类型转换机制,并结合《C++必知必会》这本书中的知识点进行深入探讨。 首先,我们来看C++的隐式类型转换。隐式转换是指编译器自动进行的类型转换,如从较小的数据类型(如int)转换到较大...

    C++必知必会(pdf格式)

    《C++必知必会》是一本针对C++编程语言的经典教材,旨在帮助读者深入理解和熟练掌握C++的核心概念和技术。这本书涵盖了从基础语法到高级特性的广泛内容,是学习C++编程的重要参考资料。 首先,C++是一种面向对象的...

    C++必知必会

    "C++必知必会"作为一个高级教程,旨在帮助程序员深入理解C++的核心概念,掌握其高级特性和最佳实践。以下是这个教程可能涵盖的一些关键知识点: 1. **基础语法**:C++起源于C语言,保留了C的大部分语法特性,如变量...

    C++必知必会.rar

    "C++必知必会"这本书旨在帮助学习者掌握C++的核心概念和技术,成为一名熟练的C++程序员。下面我们将详细探讨C++的一些关键知识点。 1. **基础语法**:C++源自C语言,因此保留了C的大部分语法特性,如变量定义、数据...

    C++必知必会中文版.rar

    5. **继承与多态**:理解类的继承关系,掌握虚函数和多态性,这是实现面向对象设计的关键。 6. **模板**:学习如何使用模板来编写泛型代码,实现代码重用。 7. **内存管理**:了解动态内存分配(new和delete操作)...

    山东建筑大学Java面向对象程序设计实验报告总.zip

    4. 多态:多态是指同一种行为可以有不同的表现形式,即子类可以覆盖或重写父类的方法,提供自己的实现。这使得程序更具扩展性和灵活性。 实验报告可能详细描述了每个实验的设计思路、实现过程和结果分析。例如: -...

    500道Java后端面试必知必会-V1版.pdf

    《500道Java后端面试必知必会-V1版.pdf》这份文档的内容主要聚焦于Java后端开发领域的面试题目和知识点,其涵盖了面试者在求职过程中可能会遇到的Java相关问题。该文档适合准备Java后端开发面试的读者,帮助他们更好...

    Java语言的必知的技术点汇总.doc.pdf

    Java语言的必知技术点涵盖了从基础到高级的多个方面,是成为一名合格的Java开发者所必须掌握的关键知识。首先,JVM(Java Virtual Machine)是Java程序运行的基础,理解和掌握JVM内存模型、垃圾回收机制(GC原理)...

    C++必知必会 中文版

    书中详细解释了封装、继承和多态等面向对象编程的基本特性,这些都是理解C++高级特性的关键。 在内存管理方面,书中有专门章节讨论动态内存分配(如new和delete操作)和数组,这对于理解和避免内存泄漏至关重要。...

    C++ 必知必会

    多态(polymorphism)是通过虚函数实现的,它允许不同对象对同一消息做出不同的响应,增强了程序的灵活性。 此外,C++的模板(templates)也是重要的话题,它们允许编写泛化的代码,可以处理不同类型的数据。STL...

    《C++必知必会》,职业C++程序员必备常识

    6. **结构体与类**:理解面向对象编程的核心——类和对象,包括封装、继承和多态的概念,以及构造函数、析构函数、友元和访问修饰符的使用。 7. **模板**:了解模板的原理和用途,包括函数模板和类模板,能够编写...

    Java面试必知:核心概念与常见问题解析

    内容概要:本文详细解答了Java面试中常见的几个核心问题,涉及==与equals的区别、String的不可变性、深拷贝与浅拷贝、单例模式、异常处理机制以及继承、多态和封装的概念。每部分都配有‘大白话’讲解和示例代码,...

Global site tag (gtag.js) - Google Analytics