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