怎样翻译 override 和 overload?

原创 2011年01月19日 20:05:00

 

这两个单词常常被翻译为相同的“重载”,让人混淆,也有说 override 应该被翻译为重写或覆盖。这里有个小提示,因为并不是每个人都上过正规的OO课程,当两个单词都被翻译为“重载”时,它们的读音是不同的:

 

    override:Chong2 Zai3,重新载入

    overload:Zhong4 Zai3,超重装载

 

比如“操作符重载” 应该念为操作符Zhong4载。这里姑且不讨论应该怎样理解"载入"的意思。

 

同名函数根据参数不同而不同,这样我们让一个函数名称具有多种定义,把这种特性描述为“卡车超载”,倒是有几分神似。但是这种特性也很容易使人联想到多态。事实上,维基百科上就把操作符重载的性质描述为一种多态。所以,当提到多态时,你应该知道,多态是一个含义很广的概念。

 

但是override的翻译似乎都不怎么好,”重写“和”覆盖“从词汇上看都显得不那么术语,读的时候就很容易造成不必要的联想。英文 override 显然不是重写 overwrite,也不是覆盖 overlay,它的意思比较像”推翻“,那么为什么不翻译为”推翻“呢?看下面的例子:

 

    ”精灵“类有一个”绘制“的方法。

    “巫婆精灵“继承了”精灵“。

    1. ”巫婆精灵“重写了”绘制方法“。

    2. ”巫婆精灵“覆盖了”绘制方法“。

    3. ”巫婆精灵“推翻了”绘制方法“。

 

比较一下,先看“重写”:”巫婆精灵“重写了”绘制方法“,这不是废话吗?“巫婆精灵”的绘制方法,当然要重写,如果不重写,那岂不是要继承老方法?问题是,你怎样区分这个重写是"override”的重写,还是"non-override"的重写?

 

再看“覆盖”:”巫婆精灵“覆盖了”绘制方法“,好吧,巫婆精灵的“绘制方法”把父类的同名方法给盖住了。是不是有点像,比如说上课时,你在偷偷的看漫画,一旦老师走过来,你就把语文书盖在漫画上。那么,语文书覆盖了漫画:结果是,漫画看不见了!override 的特殊含义是说隐藏原方法使它看不见呢,还是有其它的特指呢?你怎样用“覆盖”来区分 override 和 non-override 的不同呢?你只能说:

 

    虚函数才能被覆盖,非虚函数不能被覆盖。

 

但是为什么呢?请注意这里的覆盖,它必须被理解为术语的“覆盖”才行,但“覆盖”这个单词有它的直观的认知,就是相同的名字被重新定义了。所以,实际上是说:

 

    虚函数才能被“覆盖”,非虚函数不能被“覆盖”。但是所有函数都可以被覆盖。

 

或者:

 

    虚函数才能被“特别覆盖”,非虚函数不能被“特别覆盖”。但是所有函数都可以被普通覆盖。

 

再或者:

 

    虚函数才能被覆盖,非虚函数不能被覆盖。但是所有函数都可以被重写。

 

或者:

 

    虚函数才能被重写,非虚函数不能被重写。但是所有函数都可以被重新自然定义。

 

看了这么多,你现在是否觉得思路逐渐清晰,还是越看越糊涂了?

 

再比较一下:

 

    虚函数才能被推翻,非虚函数不能被推翻。但是所有函数都可以被覆盖,这是显而易见的。

 

并且,可以自然引申开来:

 

    当你覆盖虚函数的时候,虚函数同时被推翻。(overwrite -> override)

 

这样是不是更形象,而且更加符合 override 这个单词的本意?

 


    If the function is non-virtual, nothing can _override_ it. 

    Any member of the derived class with the same name _hides_ it.

    非虚函数不能被推翻。但可以被派生类的同名函数隐匿。

 

如果写成“非虚函数不能被覆盖。但可以被派生类的同名函数隐匿。”这样恐怕难以体会覆盖和隐匿有什么不同了。

 

--

注意:所有函数都可以被覆盖,这可不一定,在 Java 里,final 函数不可覆盖。

 

java中overload与override的区别

1、综述   重写(Override)也称覆盖,它是父类与子类之间多态性的一种表现,而重载(Overload)是一个类中多态性的一种表现。 override从字面就可以知道,它是覆盖了一个方法并且对...
  • eff666
  • eff666
  • 2016年07月31日 17:28
  • 4747

Override和Overload的含义去区别

最近看了一下关于java的基础知识,对此作了一下搜集整理:  java中的继承,方法覆盖(重写)override与方法的重载overload的区别  方法的重写(Overriding)和重...
  • u011860731
  • u011860731
  • 2015年09月25日 11:25
  • 5460

重写(overwrite)、重载(overload)和覆盖(override)三者之间的区别

关于这三者之间,有很多书都说方法的重载就是方法的重写,也有很多书将两者加以区分,当然,也有很多书将覆盖和重载合并。正所谓人言可谓,我现在都开始怀疑我以前认为的两者说是不是正确的,当然,我不是认为两者说...
  • liuweishikong
  • liuweishikong
  • 2012年12月04日 22:03
  • 5774

10. Override和Overload的含义与区别。

Override(重写,运行时多态): 是子类对容许访问父类的方法进行新的编写的称呼。其中方法名和形参不能发生改变;即外壳不变,内容可以发生改变。 优点:子类可以根据实际需要,定义特定于自己的行为...
  • qq_40983603
  • qq_40983603
  • 2017年11月17日 22:18
  • 70

面试题_overload与override的区别

override(重写,覆盖) 1、方法名、参数、返回值相同。 2、子类方法不能缩小父类方法的访问权限。 3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。 4、存在于父类...
  • baidu_31337243
  • baidu_31337243
  • 2015年09月15日 21:17
  • 391

C++ override overload 的区别

        override是指在不同作用域中,多个函数原型完全一样,而实现却不同的函数。在C++中,经常发生在类的继承中。当基类中的某个方法是virtual或pure virtual函数时(当然...
  • zztfj
  • zztfj
  • 2008年07月09日 10:14
  • 6639

JAVA中的基础-----重载与重写(覆盖)的区别:overload与override

JAVA中多态的实现机制主要通过overload和override实现。 1)方法的重载:简言之,就是指同一个类有多个同名的方法,这些方法拥有不同的参数(同名不同参)。可以认为是类中方法的多态性,也称...
  • Emira_J
  • Emira_J
  • 2016年04月20日 10:21
  • 688

Java中,overload与override的区别

Java的overload(重载)与override(重写,覆盖)的区别一,overload(重载) 1,overload(重载)表示同一个类中可以有多个名称相同的方法,但是这些方法的参数列表各不相...
  • wodedipang_
  • wodedipang_
  • 2017年02月18日 14:40
  • 496

重载overlord与重写override的区别

重写只存在于子类与父类中,重载存在于一个类中。具体区别如下: 一、重写(override)override是重写(覆盖)了一个方法,以实现不同的功能。一般是用于子类在继承父类时,重写(重新实现)父类...
  • cf643487053
  • cf643487053
  • 2016年12月07日 10:28
  • 1141

重写(override),重载(overload),多态(polymorphism)

表面看起来似乎很容易混淆,其实区别很大,主要是使用场景不同。 1.重写,一般是用于子类在继承父类时。 父类和子类,只是函数内部的实现不一样,其他都必须一样。 2.重载,一般是用于在一个类内实现若...
  • crzc123
  • crzc123
  • 2015年06月25日 22:07
  • 316
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:怎样翻译 override 和 overload?
举报原因:
原因补充:

(最多只允许输入30个字)