美文网首页
多态分类-强制多态,参数多态,过载多态,包含多态

多态分类-强制多态,参数多态,过载多态,包含多态

作者: 陈半仙儿 | 来源:发表于2018-05-13 21:06 被阅读60次

OOP 和 FP 里面都有很多多态,但是关于多态的分类,网上的文章比较多、比较乱,但是大多好像是基于《On Understanding Types, Data Abstraction, and Polymorphism》中对多态的分类和理解。

多态分为两种:通用的多态和特定的多态。两者的区别是前者对工作的类型不加限制,允许对不同类型的值执行相同的代码;后者只对有限数量的类型有效,而且对不同类型的值可能要执行不同的代码。
通用的多态又分为参数多态(parametric)和包含多态(inclusion);特定的多态分为过载多态(overloading)和强制多态(coercion),即,

多态

  • 通用多态
    • 参数多态(字面意思)
    • 包含多态(如,子类多态)
  • 特定多态
    • 过载多态(如,重载)
    • 强制多态(如,隐式类型转换)

强制多态:编译程序通过语义操作,把操作对象的类型强行加以变换,以符合函数或操作符的要求。程序设计语言中基本类型的大多数操作符,在发生不同类型的数据进行混合运算时,编译程序一般都会进行强制多态。程序员也可以显示地进行强制多态的操作(Casting)。举个例子,比如,int+double,编译系统一般会把int转换为double,然后执行double+double运算,这个 int -> double的转换,就实现了强制多态,即可是隐式的,也可显式转换。

过载(overloading)多态:同一个名(操作符﹑函数名)在不同的上下文中有不同的类型。程序设计语言中基本类型的大多数操作符都是过载多态的。通俗的讲法,就是c++中的函数重载。在此处中“overload”译为“过载”,其实就是所谓的“重载”,也许“overload”就应翻译为“过载,重载”吧,那“override”就只能是“覆盖”了。

参数多态:采用参数化模板,通过给出不同的类型参数,使得一个结构有多种类型。以 Haskell 为例,<span data-type="color" style="color: rgb(51, 51, 51);"><span data-type="background" style="background-color: rgb(255, 255, 255);">参数多态是 Haskell 支持的多态中最明显的一个,Haskell 的参数多态直接影响了 Java 和 C# 等语言泛型功能的设计。Java 泛型中的类型变量和 Haskell 的参数化类型非常相似,而 C++ 的模板也和参数多态相去不远。</span></span>

包含多态:同样的操作可用于一个类型及其子类型。(注意是子类型,不是子类。)包含多态一般需要进行运行时的类型检查。-----------------对于这个概念,我的理解是虚函数“virtual---override”机制。

相关文章

  • 多态分类-强制多态,参数多态,过载多态,包含多态

    OOP 和 FP 里面都有很多多态,但是关于多态的分类,网上的文章比较多、比较乱,但是大多好像是基于《On Und...

  • C++ 多态性 运算符重载

    注意:本文中代码均使用 Qt 开发编译环境 面向对象的多态性可以分为四类:重载多态、强制多态、包含多态和参数多态,...

  • 详解Java多态

    详解Java多态 多态定义 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态...

  • 1.9 多态基本概念

    本小节知识点: 【了解】什么是多态? 【掌握】多态的条件 【了解】多态的优点 1.什么是多态? 什么是多态:多态就...

  • C++ 的多态(Polymorphism), virtual f

    多态 c++支持两种多态,编译时多态和运行时多态但其实编译时多态根本不是真正的多态,编译时多态就是函数的重载,ov...

  • 多态

    1.多态 1.多态 1.1 要点 多态是方法的多态,不是属性的多态 多态的存在有三个必要条件:继承;方法重写;父类...

  • java多态面试题

    java多态性 多态分两种: (1) 编译时多态(设计时多态):方法重载。 (2) 运行时多态:JAVA运...

  • Java_basic_10: 多态polymorphism

    多态polymorphism 多态是指对象的多种形态 主要可以分为引用多态和方法多态 继承是多态的实现基础 引用多...

  • 六、多态与虚函数

    多态的基本概念 多态 多态分为编译时多态和运行时多态。 编译时多态主要是指函数的重载(包括运算符的重载)。对重载函...

  • Java基础之面向对象

    1.多态,继承,封装 Java实现多态有哪些必要条件?具体怎么实现?多态的实现原理?多态的作用? 答:多态的优点 ...

网友评论

      本文标题:多态分类-强制多态,参数多态,过载多态,包含多态

      本文链接:https://www.haomeiwen.com/subject/mvcrdftx.html