我发现一些资源说,方法重载是一种语言的能力,可以根据上下文使用相同的方法并产生不同的结果。但是,当我阅读其他定义时,感觉这不是完整的定义。方法重载还有更多内容吗?
我发现一些资源说,方法重载是一种语言的能力,可以根据上下文使用相同的方法并产生不同的结果。但是,当我阅读其他定义时,感觉这不是完整的定义。方法重载还有更多内容吗?
那只是一种非常概括的描述方式。方法重载允许您使用单个方法名称,但根据“上下文”(通常是传递的参数类型或数量)“重载它”(提供多个版本)。由于每个方法是独立的,它们可以导致“不同的结果”。
例如,使用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
{
}
首先,您需要知道编程中的签名是什么。函数的签名是其表示形式;函数的名称和参数确定了其签名。
重载意味着更改函数的签名以满足我们的需求。
请看以下示例:
int sum(int x, int y, int z) {
return x + y + z;
}
int sum(int x, int y) {
return x + y;
}
sum()
可以通过两种不同的方式调用:您可以使用两个参数调用它,也可以使用三个参数调用它。您已更改其签名以满足您的需求。您没有为两个参数编写单独的函数,而是将负载放在同一个函数上,这就是为什么它被称为重载。这是指您可以使用同名但参数不同的多个方法。
public void kittens(String paws) {
}
public void kittens(String paws, boolean tail) {
}
两者可以独立地相互调用,使用任一种方式
kittens("fat");
or
kittens("thin", true);
methodName(int x, int y, int w, int h)
methodName(Vector x)
第一种方法的实现将是另一种选择:
methodName(new Vector(x, y, w, h))
某些语言具备创建具有相同名称但输入/输出参数不同的方法/函数的能力。
一个经典例子是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;
}
你有一个类,它有不同的构造函数接受不同的参数,正如你所看到的,它们在它们的 签名
上有所不同。