多态(polymorphism),覆盖(Override),重载(overload)

我的梦境 提交于 2020-03-20 03:37:38
覆盖 override

Overriding
也许叫做overwriting更合适,
OVERLOAD
覆盖是指在子类(c++中的派生类) 中重新定义父类的函数,其函数名、参数列、返回值类型必须同父类中的相对应被覆盖的函数严格一致,覆盖函数和被覆盖函数只有函数体(花括号中的部分)不同,当派生类对象调用子类中该同名函数时会自动调用子类中的覆盖版本,而不是父类中的被覆盖函数版本。
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)

重载(overload):
在同一个类中,出现多个同名的方法的现象就是Overload
重载事发生在同一个类中,不同方法之间的现象。

c++或者java中,方法一般为
返回类型 方法名(参数1,参数2)
判断2个方法是不是overload,主要指方法名一样,参数不一样,
参数不一样指的是参数的个数,相同位置的参数的类型是否一样,而与参数(型参)的名称无关(参数类型/个数/顺序,不同),
与返回类型也无关。程序会根据不同的参数列来确定需要调用的函数
比如c++或者java中,这都是overload
void m1();
void m1(int arg);
void m1(int arg, char* x);
Overloaded的方法是可以改变返回值的类型。

多态(polymorphism)
多态有时候也被称为动态绑定或者晚绑定或运行时绑定,意思是编译的时候不必关心,运行的时候才决定调用哪个对象的哪个方法。
我觉得多态的用途之一就是在父类提供一个接口(服务),然后调用的时候用的却是子类的具体实现。
多态性是面向对象的基本特性,而overload应该不算是面向对象的特性吧。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!