多态是面向对象的特性之一,理解也不是特别困难,但是最近发现很多人喜欢把多态和覆盖(Overriding,暂且这么翻译吧)搅在一起。其实自己刚开始学的时候也曾经有过困惑,什么叫做重载(Overloading),什么叫做覆盖(Overriding),后来看书多了也就慢慢理解了,大体的总结一下:
重载是方法之间的一种关系,多个方法使用相同的方法名,但是签名不同,所以我们可以通过签名来区分。早期的java中因为没有采用模板机制,所以大量的方法都是采用重载的方法写成的,比如最经典的System.out.println();在代码里有十种实现方法,接受各种不同类型的参数。这是Overloading。
    覆盖是类层次结构中的一种关系,比如父类有某个方法,子类中同样实现一个同名并且签名相同的方法,这种情况我们称之为overriding。注意,这里要求签名相同。但是返回值可以有些许不同,这里的不同指的是子类中重写的方法可以返回父类中返回类型的子类型,说起来很绕,简单的举个例子,如果父类中方法的返回类型是Number类型,那么子类中的这个覆盖方法的返回类型可以是Number类型,也可以是其子类型,比如Integer,Double等等。
    这样两个概念的区别已经很明了了,而且也应该知道,覆盖是实现多态的关键技术。
    两个概念还有个重要的区别是,重载是静态绑定的,因为编译的时候我就可以根据签名确定具体要调用的方法,而覆盖是运行时绑定的,因为运行的时候我才能根据运行时类型信息,确定具体要调用哪个类中定义的覆盖方法。
    最后,引经据典,配合一下自己的说法。
    《The Java Programming Language》中:
   
Overloading a method is what you have already learned: providing more than one method with the same name but with different signatures to distinguish them.
Overriding a method means replacing the superclass's implementation of a method with one of your own. The signatures must be identicalbut the return type can vary in a particular way, as discussed below.
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ZangXT/archive/2008/07/19/2678981.aspx

转载于:https://blog.51cto.com/77857/175302

关于多态override/overload相关推荐

  1. C++中override overload overwrite

    C++中override overload overwrite 1. overload(重载)(不是多态) 重载:是指同一可访问区内被声明的几个具有不同的参数列(参数类型.参数个数.顺序不同)的同名函 ...

  2. java 中的override overload 比较

    java 中的override & overload 比较 很久没看Java,忘记override和overload的区别了.百度了一下,把一个小弟的文章抄下来,备用. 方法的重写(Overi ...

  3. overwrite java_Java中的Override, Overload和Overwrite

    中文翻译分别是覆盖,重载和重写 Override 和 Overwrite 实际上覆盖(Override)和重写(Overwrite)是对同一概念的不同称呼. 重写是子类对父类的允许访问的方法的实现过程 ...

  4. 术语Override,Overload,Hide,Shadow,Obscure的解释

    Override,即重写,Java最基础的编程技巧之一.仅针对实例方法,并且能够被子类所访问, 且子类该方法的访问权限至少大于父类.遵循运行期绑定原则. Overload,即重载,Java最基础的编程 ...

  5. java方法调用之动态调用多态(重写override)的实现原理——方法表

    转自:http://blog.csdn.net/fan2012huan/article/details/51007517 上两篇篇博文讨论了java的重载(overload)与重写(override) ...

  6. 类对接口的实现不叫继承_Java多态的实现机制是什么,看完你就知道(值得收藏)...

    Java多态的实现机制是父类或接口定义的引用变量可以指向子类或实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实现对象的方法,也就是内存里正在运行的那个对象的方法,而不是 ...

  7. 面向对象三大特性: 封装,继承,多态

    面向对象的三大特性:封装,继承,多态. 一.封装:目的:如何做类,让类更安全. 让一些成员变量不能被外界直接被访问. 方法: 1.将成员变量变为private. 2.在类里面做一个成员方法来间接访问. ...

  8. 重写(覆盖)重载与多态

    override->重写(=覆盖).overload->重载.polymorphism -> 多态 override是重写(覆盖)了一个方法,以实现不同的功能.一般是用于子类在继承父 ...

  9. java多态的实现_Java多态的实现机制是什么,写得非常好!

    作者:crane_practice www.cnblogs.com/crane-practice/p/3671074.html 2019-06-13 08:46:00 Java多态的实现机制是父类或接 ...

最新文章

  1. [Advance] How to debug a program (上)
  2. LeetCode Algorithm 7. 整数反转
  3. EF Core 3.0查询
  4. nowcoder172C 保护 (倍增lca+dfs序+主席树)
  5. a1740最新php唯美博客系统源码,axublog 个人博客系统 php版 v1.1.1
  6. Linux---多线程
  7. 配置linux的web服务
  8. 不要在锁的作用域之外通过指针或引用传递要保护的数据
  9. 手机远程连接服务器工具:RD client远程桌面使用教程
  10. CDH6离线安装教程
  11. 电阻的寄生电感、寄生电容
  12. 小demo,点石成金
  13. win10 锁屏时间无法设置 解决方法
  14. JS中的CommonJS和AMD
  15. iOS——编译与链接
  16. hdu 2086 A1 = ?(递推)
  17. 使用CStdioFile操作文件和filetxt.cpp报错和filecore.cpp报错
  18. 行内元素与块级元素区别1.0
  19. C# vb .net实现gamma伽玛调整特效滤镜
  20. 计算机更换硬盘键盘鼠标不好使,计算机上安装的原始Win7系统的鼠标和键盘无法移动硬盘,并且无法识别解决方案...

热门文章

  1. 分块的单点修改查询区间和_树状数组的区间修改与单点查询与区间查询
  2. springboot2.4跨域配置的方法
  3. 想自学stm32不知道怎么买板子?我来告诉你新手该买哪一个!
  4. 分类讨论 ---- 2020 icpc 上海 Walker (二分 or 思维分类讨论)
  5. html5 漂亮的左右布局_欧式带小院10X16米,适合农村建房,比别墅还漂亮
  6. 2019 ACM - ICPC 西安邀请赛 B. Product (杜教筛) 简单数论(bushi)
  7. 解题报告(五)组合计数(ACM / OI)超高质量题解
  8. 解题报告:POJ - 1062 昂贵的聘礼(最短路、超级源点)
  9. 牛妹吃豆子(二维前缀和模板,修改+求和)
  10. mysql 基于gtid复制_深入MySQL复制(二):基于GTID复制