【发布时间】:2017-07-31 20:26:38
【问题描述】:
我发现资源说方法重载是一种语言根据上下文使用具有不同结果的相同方法的能力。 不知何故,当我阅读其他定义时,我觉得这不是整个定义。还有更多方法重载吗?
【问题讨论】:
标签: oop overloading
我发现资源说方法重载是一种语言根据上下文使用具有不同结果的相同方法的能力。 不知何故,当我阅读其他定义时,我觉得这不是整个定义。还有更多方法重载吗?
【问题讨论】:
标签: oop overloading
这只是一种非常笼统的描述方式。方法重载允许您使用单个方法名称,但“重载它”(提供多个版本)取决于“上下文”(通常是传入的参数的类型或数量)。由于每种方法都是独立的,它们可能会导致“不同的结果”。
例如,使用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");
或
kittens("thin", true);
【讨论】:
这种情况下的上下文由方法的参数签名决定,即参数的数量和类型。
例如:
methodName(int x, int y, int w, int h)
methodName(Vector x)
第一个方法实现可以替代:
methodName(new Vector(x, y, w, h))
【讨论】:
是某些语言创建具有相同名称但 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 不同。
【讨论】: