术语“重载”和“覆盖”声音非常相似(这就是为什么它们有时相互对抗),但这两个概念在技术上是否相关?
术语“重载”取决于“方法签名”定义。所以我有一个类似的问题。
答案 0 :(得分:8)
重载具有多个具有相同名称但不同参数的函数。例如
例如
void SayHi(string name) { ... }
void SayHi(string, int age) {.... }
这些都是重载。
覆盖"替换"现有功能,因此您可以使用现有功能并提供具有相同名称和相同参数的全新功能
class Person
{
public virtual void SayHi(string name)
{
// ....
}
}
class Teenager : Person
{
public override void SayHi(string name)
{
// ....
}
}
方法签名与覆盖新覆盖函数必须具有与它尝试覆盖的方法相同的方法签名以及相同返回类型的方式有关。
方法签名与重载有关,超载必须具有不同的方法签名。
答案 1 :(得分:3)
重载是指具有相同方法或函数名称的多个版本,其中每个版本具有不同的参数类型,例如。 C ++中的init( int, int )
和init( const char * )
,具有特定于参数类型的实现。编译器将根据您在特定调用中使用的参数选择要调用的版本。方法签名是指参数的类型和顺序。对于重载,方法的不同版本的方法签名必须不同。
Overriding是指一个派生类,它实现了它在基类中声明的方法的自有版本,用一个特定于派生类的方法替换方法的基类实现。对于重写,派生类方法的方法签名必须与基类方法的方法签名相同。如果它不同,派生类会重载基类方法,而不是覆盖它。