2012-03-07 101 views
-2

我仍然是Java核心的學習者。 我想了解這裏的多態概念。Java方法重載

我已經理解了重寫並且有一個關於重載的問題。

爲什麼我們稱之爲方法重載,儘管我們調用的是不同的方法(我的意思是隻有參數不同)。

我只是覺得這是與調用在編譯時,在這裏唯一的區別結合不同的方法很簡單,就是我有一個相同的方法名..

Class A { 

    method A(int i){} 

    method A(int i, int B){} 

} 

請分享您的輸入。

THKS Punith

+2

什麼問題? – 2012-03-07 08:41:04

+1

http://en.wikipedia.org/wiki/Function_overloading – 2012-03-07 08:41:18

+1

您需要提出一個更精確的問題 - 目前並不真正負責。 – 2012-03-07 08:41:33

回答

6

用方法重載你打電話「同樣的方法」,只有不同的參數和/或不同的輸出。這使您可以輕鬆編寫具有相同核心功能但具有不同輸入參數的方法。例如:

public int Sum(int a, int b) { 
    return a + b; 
} 

public double Sum (double a, double b) { 
    return a + b; 
} 

否則,你會有像SumInt(...)和SumDouble(...)等方法。你也可以有2種方法具有相同的返回類型,但不同的輸入和仍然使用重載以方便:

public int Sum(int a, int b) { 
    return Sum(a, b, 0); 
} 

public int Sum (int a, int b, int c) { 
    return a + b + c; 
} 

這樣,你只有一個地方與人的邏輯和所有其他方法只是調用一種方法與所有的邏輯,只有不同的參數。然後還有構造函數重載。例如,你可以在其中設置一些默認值一個空的構造,你可以有一個構造函數,你可以自己設置值:

//Without overloading you'll have to set the properties after instantiating the class 
public MyClass() { 
    this.PropertyOne = "1"; 
    this.PropertyTwo = 2; 
} 

//usage: 
MyClass instance = new MyClass(); 
//now theproperties are already set to "1" and 2, wheter you like it or not 
//here you change the values 
instance.PropertyOne = "..."; 
instance.PropertyTwo = 0; 

//With constructor overloading you have this 
public MyClass() { 
    this("One", 2); 
} 

public MyClass(string propOne, int propTwo) { 
    this.PropertyOne = propOne; 
    this.PropertyTwo = propTwo; 
} 

//usage: 
MyClass instance = new MyClass("MyValue", 1000); 
//if you call MyClass() the default values STILL will be set :) 

第二種方式爲您提供了更多的可能性,不是?這使得更改代碼變得更容易。希望這可以幫助!

0

OK,我不知道你到底想知道什麼?
多態性 -
1日的事情: -多態性是使用以減少程序設計師的複雜性。想想會發生什麼,如果println()沒有超載,你必須記住不同的功能來打印不同類型。
第二件事: -在java編譯時多態性不支持的情況下,在java中所有的函數都是隱式虛擬的。它也在運行時實現。
3ST的事情: -通過重載函數都具有不同的原型,原型=
名稱,返回類型和參數相同的名稱。 在返回類型爲u的java中沒有實現重載,名稱必須相同,所以只有東西是參數可以改變以實現重載。

+0

方法重載是一種解決編譯時間的多態性形式:http://en.wikipedia.org/wiki/Ad-hoc_polymorphism – 2012-03-07 10:53:56

1

請注意,雖然方法重載是在方法做幕後同樣的事情的情況下非常有用,它可以成爲地獄的時候,這是不是這樣的:

someObject.setValue(obj.getTime()); // getTime returns a java.util.Date 

一些重構(日期更改爲後長時間戳...):

someObject.setValue(obj.getTime()); // getTime now returns a long 

在新的代碼setValue可能不會表現得像前一個如果長時間不喜歡幕後java.util.Date處理。

編譯器不會顯示任何錯誤,因爲具有相同名稱的另一個方法將默默接管您的新類型,程序將被破壞!

只有在方法執行相同操作時才使用重載,否則每次使用不同的方法名稱以避免重構問題。

-1

方法重載定義可以由具有三點:
1.同樣方法名
2.不同的參數列表
3.通過改變參數順序。當需要對象與不同的輸入parameter..We執行相同的任務可以理解方法通過示例

Class Rectangle 
{ 
int length,breadth; 
//Default Constructor 
Rectangle() 
{ 
length=0; 
breadth=0; 
} 
//Parameterized Constructor 
Rectangle(int x,int y) 
{ 
length=x; 
breadth=y; 
} 
int area() 
{ 
int a; 
a=length * breadth; 
    return(a); 
System.out.println("Area of rectangle is:"+a); 
} 
Class calarea 
{ 
public static void main(string args[]) 
    { 
Rectangle rect1= new Rectangle(); 
Rectangle rect2= new Rectangle(10,15); 
rect1.area(); 
rect2.area(); 
} 
} 

下面超載更清楚地在此程序

方法重載使用我們可以看到,同樣的方法「 Reactangle「正在使用兩個不同的參數列表,所以我們可以說構造函數方法正在超載... 首先匹配方法名稱,然後匹配參數的數量和類型,並根據此調用功能。

方法重載不能用兩點來實現:
1)通過改變返回值類型
2)通過僅更改參數名稱

0

「爲什麼我們稱其爲方法重載雖然我們呼籲不同的方法(我的意思是隻有參數不同)。「

你正在考慮開發這個類的開發人員,因此你說每次根據參數調用不同的方法(他們的類型和/或數)。

嘗試作爲開發人員考慮使用此類。對他來說,似乎他只用一種方法來迎合他希望傳遞的所有類型的論點(儘管不同的方法被稱爲外部世界,但「似乎」只有一種方法)。

希望它有幫助:)