2013-03-28 88 views
3

我發現資源說方法重載是一種語言根據上下文使用具有不同結果的相同方法的能力。不知何故,當我讀到其他的定義時,我就認爲這不是完整的定義。有更多的方法重載?什麼是方法重載?

回答

7

這只是一種非常普遍的描述方式。方法重載允許您使用單個方法名稱,但根據「上下文」(通常是傳入的參數的類型或數量),「重載它」(提供多個版本)。由於每種方法都是分開的,它們可能會導致「不同的結果」。

例如,使用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 
{ 
} 
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不同的不同的構造函數的類。

1

這是你擁有衆多使用不同參數的同名方法的地方。

public void kittens(String paws) { 

} 

public void kittens(String paws, boolean tail) { 

} 

兩者都可以獨立地被調用,以彼此與任一

kittens("fat"); 

kittens("thin", true); 
0

在這種情況下的上下文是由該方法的參數簽名來確定,即數和參數的類型。

例如:

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

第一種方法的實現將是一個替代方案:

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

首先,你應該知道什麼是編程簽名。函數的簽名是它的表示;函數的名稱及其參數決定了它的簽名。

重載意味着更改函數的簽名以滿足我們的需求。

看一看下面的例子:現在

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

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

,功能sum()可以通過兩種不同的方式被稱爲:要麼你可以用兩個參數來調用它,或者你可以用三個參數來調用它。您已更改其簽名以滿足您的需求。不是爲兩個參數編寫單獨的函數,而是將負載放在同一個函數上,這就是爲什麼這稱爲重載。