什么是方法重载?

8

我发现一些资源说,方法重载是一种语言的能力,可以根据上下文使用相同的方法并产生不同的结果。但是,当我阅读其他定义时,感觉这不是完整的定义。方法重载还有更多内容吗?

5个回答

11

那只是一种非常概括的描述方式。方法重载允许您使用单个方法名称,但根据“上下文”(通常是传递的参数类型或数量)“重载它”(提供多个版本)。由于每个方法是独立的,它们可以导致“不同的结果”。

例如,使用C#,您可以编写:

void Foo()  // Version with no arguments
{
}

void Foo(int arg) // Version with a single int
{
}

void Foo(string arg1, double arg2) // Version with string and double parameters
{
}

4

首先,您需要知道编程中的签名是什么。函数的签名是其表示形式;函数的名称和参数确定了其签名。

重载意味着更改函数的签名以满足我们的需求。

请看以下示例:

int sum(int x, int y, int z) {
    return x + y + z;
}

int sum(int x, int y) {
    return x + y;
}

现在,函数sum()可以通过两种不同的方式调用:您可以使用两个参数调用它,也可以使用三个参数调用它。您已更改其签名以满足您的需求。您没有为两个参数编写单独的函数,而是将负载放在同一个函数上,这就是为什么它被称为重载。

1

这是指您可以使用同名但参数不同的多个方法。

public void kittens(String paws) {

}

public void kittens(String paws, boolean tail) {

}

两者可以独立地相互调用,使用任一种方式

kittens("fat"); 

or

kittens("thin", true);

0
这种情况下的上下文是由方法的参数签名确定的,即参数的数量和类型。
例如:
methodName(int x, int y, int w, int h)
methodName(Vector x)

第一种方法的实现将是另一种选择:

methodName(new Vector(x, y, w, h))

0

某些语言具备创建具有相同名称但输入/输出参数不同的方法/函数的能力。

一个经典例子是Java中的类构造器重载:

  //Constructor without parameters
  public User() {
  }

 //Constructor with only one parameter
 public User(String username)
 {
 this.username = username;
 }

 //Constructor with two parameters
 public User(String username, int age)
 {
   this.username=username;
   this.age=age;
 }

你有一个类,它有不同的构造函数接受不同的参数,正如你所看到的,它们在它们的 签名 上有所不同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接