7

我发现资源说方法重载是一种语言根据上下文使用具有不同结果的相同方法的能力。不知何故,当我阅读其他定义时,我觉得这不是整个定义。还有更多方法重载吗?

4

5 回答 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
{
}
于 2013-03-28T15:57:34.793 回答
4

首先,你应该知道什么是编程中的签名。函数的签名是它的表示;函数的名称及其参数决定了它的签名。

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

看看下面的例子:

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

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

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

于 2013-03-28T16:02:19.500 回答
1

在这里,您可以拥有许多具有不同参数的同名方法。

public void kittens(String paws) {

}

public void kittens(String paws, boolean tail) {

}

两者都可以相互独立地调用

kittens("fat"); 

或者

kittens("thin", true);
于 2013-03-28T15:57:56.740 回答
0

是某些语言创建具有相同名称但input/otput参数不同的方法/函数的能力。

一个经典的例子是constructor overloadingJava 中的类示例:

  //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;
 }

您有一个具有不同构造函数的类,它们接受不同的参数,正如您所见,它们的signature.

于 2013-03-28T15:57:40.867 回答
0

这种情况下的上下文由方法的参数签名决定,即参数的数量和类型。

例如:

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

第一种方法实现可以替代:

methodName(new Vector(x, y, w, h))
于 2013-03-28T15:59:00.430 回答