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