方法签名、重载、重写:所有这些术语都相关

本文关键字:术语 所有这些 重写 重载 方法 | 更新日期: 2023-09-27 18:35:33

术语"重载"和"覆盖"听起来非常相似(这就是为什么它们有时相互对立),但这两个概念在技术上相关吗?

  1. 术语"重载"和"覆盖"是否相关?

术语"重载"取决于"方法签名"定义。所以我有一个类似的问题。

  1. (相关一)术语"方法签名"是否也与"覆盖"有关?

方法签名、重载、重写:所有这些术语都相关

重载是具有多个具有相同名称但不同参数的函数。例如

例如

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)
    {
        // ....
    }
}
方法签名与重写

相关,因为新的重写函数必须具有与它尝试重写的方法相同的方法签名,并且具有相同的返回类型。

方法签名

与重载相关,重载必须具有不同的方法签名。

重载是指具有相同方法或函数名称的多个版本,其中每个版本都有不同的参数类型,例如。 init( int, int )init( const char * ) C++,以及特定于参数类型的实现。编译器将根据您在特定调用中使用的参数选择要调用的版本。方法签名是指参数的类型和顺序。对于重载,不同版本方法的方法签名必须不同。

重写是指派生类实现其在基类

中声明的方法的自己的版本,将方法的基类实现替换为特定于派生类的实现。对于重写,派生类方法的方法签名必须与基类方法的方法签名相同。如果它不同,则派生类将重载基类方法,而不是重写它。