java - Is overloading polymorphic? ?
给我你的怀抱
给我你的怀抱 2017-06-12 09:20:06

This problem is really a headache, no matter what you say

View 1: The three elements of polymorphism, 1,2,3
So overloading is not polymorphism

View 2:

Mentioned in the book java virtual machine

Some of the most basic manifestations of polymorphism characteristics, such as "overloading" and "rewriting" Section 8.1
This means that overloading and rewriting are both manifestations of polymorphism

How do you understand

给我你的怀抱
给我你的怀抱

reply all(3)
给我你的怀抱

实际上,中文“重载”对应的英文有三个:override, overload 和 overwrite,后来渐渐把最后一个改译为“重写”或者“改写”。

override,是指对父类同签名的函数进行重新定义的一种做法,这种情况下,父类函数和子类函数都分别独立的个体。但在调用的时候,编译器(或解释器)能根据对象的实际类型来判断调用哪一个实现。

overload 是指对同一个函数名,不能签名的多种实现。这种情况下,往往可以使同一个函数名对不同类型的参数进行调用而产生不同的结果,典型的例子就是 max(int, int)max(double, double) 等。

overwrite 通常是子类对父类同签名函数的改写,两个函数签名一样,但是毫无关系。这种情况下父类类型对子类对象的引用,调用方法是是调用的父类方法(注意与 override 的不同)

关于 overwrite 和 override 的不同,如下图

现在来说多态。我们先看看多态的定义:

  • 多态指同一个实体同时具有多种形式。(必应网曲)

  • 多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。(百度百科)

从定义来看,“重载”与多态无关,但是重载是多态的一种体现形式,其它的还包括接口、抽象、虚函数、模板、泛形…………,再从百度百科引用几句话:

  • 简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。多态性在Object Pascal和C++中都是通过虚函数实现的。

  • 多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。

  • C++中,实现多态有以下方法:虚函数,抽象类,覆盖,模板(重载和多态无关)。

  • 多态就是允许方法重名 参数或返回值可以是父类型传入或返回。

Popular topics
More>
Latest downloads
More>
web effects
Website source code
Website materials
Front end template
About us Disclaimer Sitemap
PHP Chinese website:Public welfare online PHP training,Help PHP learners grow quickly!