什么是方法重载?

时间:2013-03-28 15:55:19

标签: oop overloading

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

5 个答案:

答案 0 :(得分:10)

这只是描述它的一种非常通用的方式。方法重载允许您使用单个方法名称,但“重载它”(提供多个版本)取决于“上下文”(通常是传入的参数的类型或数量)。由于每种方法都是分开的,它们可能会导致“不同的结果”。

例如,使用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
{
}

答案 1 :(得分:4)

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

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

看一下以下示例:

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

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

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

答案 2 :(得分:1)

在这里你有许多具有不同参数的同名方法。

public void kittens(String paws) {

}

public void kittens(String paws, boolean tail) {

}

两者都可以用

相互独立调用
kittens("fat"); 

kittens("thin", true);

答案 3 :(得分:0)

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

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

  //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不同。

答案 4 :(得分:0)

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

例如:

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

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

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