override v.s. overload v.s. overwrite

本文最后更新于:2022年9月12日 下午

简单讲讲C++与Java中的overload,overwrite,override的概念

C++

stackoverflow:

In C++ terminology, you have overriding (relating to virtual methods in a class hierarchy) and overloading (related to a function having the same name but taking different parameters). You also have hiding of names (via explicit declaration of the same name in a nested declarative region or scope).

The C++ standard does not use the term “overwrite” except in its canonical English form (that is, to replace one value with a new value, as in the assignment x = 10 which overwrites the previous value of x).

也就是说,C++中在函数层面,并没有overwrite的概念。

overloading,函数重载,更多适应于在面向过程编程时,函数名相同但是参数列表不同的函数。(注:重载的返回值可以不同,因为返回值并不是区分重载函数的条件。之所以不是,是因为并不是每次调用函数都会接收返回值,返回值只是一种状态)。

override,函数重写,也称为覆盖,适用于在面向对象编程,并且使用到了继承的类结构体系时,子类重写父类方法,此时函数名相同并且参数列表相同

overwrite,类似hiding隐藏的概念,针对变量,可以重新赋值,就是隐藏了之前的值;针对文件,也是类似。

Java

与C++基本相同。也有重写与重载的区别。

重载:由于Java完全面向对象,因此没有面向过程的编程。所以重载,就只是在一个类的内部函数名一样但是参数列表不同

重写:子类重写父类的同名同参数方法,java5以后还支持重写返回值(返回值可以不同)。如果返回值也一样,这种特殊的重写称为重构。

当需要在子类中调用父类的被重写方法时,要使用 super 关键字。

Ref

https://stackoverflow.com/questions/4738315/c-overriding-overwriting

https://www.runoob.com/java/java-override-overload.html


override v.s. overload v.s. overwrite
https://blogoasis.github.io/post/9e1da285.html
作者
phInTJ
发布于
2022年9月12日
许可协议