符志軍 王景景
【摘 要】方法重載是讓類以統(tǒng)一的方式處理不同類型數(shù)據(jù)的一種手段。多個同名函數(shù)同時存在,具有不同的參數(shù)個數(shù)/類型。重載Overloading是一個類中多態(tài)性的一種表現(xiàn)。Java的方法重載,就是在類中可以創(chuàng)建多個方法,它們具有相同的名字,但具有不同的參數(shù)和不同的定義。
【關(guān)鍵詞】方法重載;多態(tài)性;參數(shù)
一、方法重載性質(zhì)
多態(tài)性可以用“一個對外接口,多個內(nèi)在實現(xiàn)方法”來表示。也就是說,我們可以在一個類中定義多個同名方法,程序在調(diào)用某個方法時,系統(tǒng)會自動根據(jù)參數(shù)類型和個數(shù)的不同調(diào)用不同的方法,這種機制被稱為方法重載。它與方法重寫不一樣。方法重載:同一個類中,方法名相同,參數(shù)不同,方法體不同;方法重寫:不同的類中,方法體不同,參數(shù)相同,方法名也相同.(兩同兩不同)方法重載的作用:在有多個同名參數(shù)的類中,在調(diào)用時通過不同的參數(shù)來調(diào)用不同的方法。方法重寫的作用: 在繼承中,子類可用方法重寫,對父類進行擴充或改造。
Java支持重載方法,即多個方法可以共享一個名字。但是,各方法之間必須在參數(shù)個數(shù)、順序或類型方面有所區(qū)別。如下就是一個重載了而重載要滿足一下條件:1.必須是同一個類。2.方法名(也可以叫函數(shù))一樣。3.參數(shù)類型不一樣或參數(shù)數(shù)量不一樣。
例如:
public class DoubleIt{
public static String doubleItt(String data){ // 參數(shù)類型為String
System.out.println(data+data);
returndata+data;
}
public static intdoubleItt(int data){ // 參數(shù)類型為int
System.out.println(2*data);
return 2*data;
}
}
二、方法重載作用
方法重載就是對不同數(shù)據(jù)類型的的數(shù)據(jù)實現(xiàn)相似的操作。方法重載,很大程度是為了程序的可讀性,即使不用,也是不會妨礙程序運行的。當我們利用繼承由父類創(chuàng)建子類時,如果父類中的某些方法不適合子類,我們無法刪除它們,但可以重新定義它們,這被稱為覆蓋。
三、方法重載的類型
java允許在一個類中,多個方法擁有相同的名字,但在名字相同的同時,必須有不同的參數(shù),這就是重載,編譯器會根據(jù)實際情況挑選出正確的方法,如果編譯器找不到匹配的參數(shù)或者找出多個可能的匹配就會產(chǎn)生編譯時錯誤,這個過程被稱為重載的解析。
(一)普通方法的重載
普通方法的重載是Java實現(xiàn)多態(tài)技術(shù)的重要手段,為編程帶來了很多便利
當方法同名時,為了讓編譯器區(qū)別他們,至少需要下面之一不同:
1)參數(shù)個數(shù)不同
2)對應位置上的參數(shù)類型不同不允許參數(shù)完全相同而只是返回值不同的情況出現(xiàn)。無法進行編譯,程序在eclips中顯示錯誤。
(二)構(gòu)造方法的重載
(三)重載的解析
當類的設(shè)計者提供了重載方法之后,類的使用者在使用這些方法時編譯器需要確定調(diào)用哪一個方法,確定的唯一依據(jù)是參數(shù)列表,確定的過程被稱為重載的解析。
以下舉些例子說明:
showaa(int a ,int b,int c) //這是一個具有相同的參數(shù)數(shù)據(jù)類型的方法
showaa(int a ,int b,double c) //這是一個具有不同數(shù)據(jù)類型參數(shù)的方法
showaa(int a ,double b,double c)// 這是一個具有不同數(shù)據(jù)類型參數(shù)的方法
showaa(double a,doubleb,int c) //這是一個具有不同數(shù)據(jù)類型參數(shù)的方法
下面是調(diào)用
showaa(4,2,3);//1,2,3,4都是可行方法所有參數(shù)完全匹配1
showaa(6.0,2.0,3.0);//沒有一個可行方法
showaa(4.0,2,3);//4是最佳可行方法
showaa(7,2.0,3);//3,4都是可行方法,沒有最佳可行方法,報錯。
重載和覆蓋都是多態(tài)的表現(xiàn),他們在某些地方很相似,很容易引起初學者的疑惑,這里將它們之間的區(qū)別總結(jié)如下:
1.重載和覆蓋的方法名稱都相同,但重載要求參數(shù)列表不同,而覆蓋要求參數(shù)列表完全相同。
2.重載對于方法前面的修飾符沒有限制,而覆蓋則對這些修飾符的使用有限制
3.重載時編譯器在編譯期間就可以確定調(diào)用那一個方法,而覆蓋則有可能在運行期間才能確定。
四、方法重載與重寫的區(qū)別
方法重載是指方法名和方法的返回類型都相同,但方法參數(shù)不一樣. 參數(shù)不一樣體現(xiàn)在參數(shù)個數(shù)和參數(shù)類型不一樣.方法重寫:方法重寫是相對繼承而言的. 重寫的方法名.返回類型,參數(shù)類型和參數(shù)個數(shù)都要求和父類中的一樣. 這是重載和重寫形式上的區(qū)別。
本質(zhì)上的區(qū)別是:重寫Overriding是父類與子類之間多態(tài)性的一種表現(xiàn),重載Overloading是一個類中多態(tài)性的一種表現(xiàn)。如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說該方法被重寫(Overriding)。子類的對象使用這個方法時,將調(diào)用子類中的定義,對它而言,父類中的定義如同被"屏蔽"了。如果在一個類中定義了多個同名的方法,它們或有不同的參數(shù)個數(shù)或有不同的參數(shù)類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。
java中重寫父類的方法只需寫出與父類一模一樣的這個方法即可,包括方法名,參數(shù)類型,參數(shù)值,返回值。java重寫父類方法后,原有的父類里面的實現(xiàn)全部清空,變?yōu)橹貙懞蟮膬?nèi)容。
方法重載為:
Public static void main(string[] args){
//todo自動生成的方法存根
Overload reload=new overload();
Reload.method();
}
Public void method(){
System.out.println(“這是一個普通的函數(shù)”);
}
Private void method(){
System.out.println(“這是對method方法的重載):
}
}
在重載的方法中一般地訪問權(quán)限修飾符對方法的重載不影響。也即,它們不是構(gòu)成不同方法的必要條件。通俗點講,方法的不同和訪問修飾符是否一致沒有任何關(guān)系。當然在以上的程序中如果訪問修飾符不一致,而參數(shù)相同(或者都沒有參數(shù))的話,java默認其都為同一種方法,因此編譯無法通過,報錯。
【參考文獻】
[1] 張潤蓮,張向利,葉進.案例教學法及其運用[J].桂林電子工業(yè)學院學報,2004,24(4):102-105.
[2]李嵐.案例教學法探析[J].云南財貿(mào)學院學報,2004,20:347-349.
[3] 宋平;王振;提高Java語言教學效果的探索與實踐[J];沈陽農(nóng)業(yè)大學學報(社會科學版);2006年04期