今天是去公司上班的第三個星期,因為自身的原因每天寫部落格的習慣還是有點堅持不下來,所以部落格一直丟下了兩個星期沒寫,今天終於又敲起鍵盤來寫部落格了。
這兩個星期一直都在公司複習Java基礎知識,等待著南方航空公司那邊的通知過去考核,說是話實在有點堅持不住了,每天在公司漫無目的的找一些題目來看,複習。一上午下來就有點打瞌睡了,真的希望南方航空那邊快點通知過去考核,能過就過,不能過也就在重新找工作唄!也沒什麼大不了的!但是我對自己的要求是:必須pass!我對自己還是很有信心的。根據最近在複習的情況來看,考Java基礎我應該不會有太大的問題。但是如果又考哪些什麼軟體工程導論啊、C++的話我就沒轍了,說實話範圍真的有點大,我們的項目組也不好把握啊!在此想問問廣大的朋友有沒有去南方航空公司那邊考過Java相關的試題的?能否貢獻一些出來?如果可以,發到我郵箱吧!地址:1035776548@qq.com
謝謝!
噢噢!不好意思有點偏題了,說回剛剛的方法重寫和方法重載!今天我在複習方法重寫和方法重載,感覺自己還是不太懂,尋找資料後,大概明白了挺多的!下面跟大家分享一下。
首先方法重寫和方法重載是建立在Java的物件導向的繼承和多態的特性基礎上而出現的。至於物件導向的繼承和多態的特性我就不在這裡多說了。繼承是指在一個父類的基礎再建立一個子類,這樣子類就擁有了父類的非私人的特性,同時子類還可以擴充自己的特性,這樣就引出了方法重寫和方法重載!
一、方法重寫(Override)
在Java中如何來定義重寫:Java程式中類的繼承特性可以產生一個子類,子類繼承父類就擁有了父類的非私人的屬性(方法和變數),在子類中可以增加自己的屬性(方法和變數),同時也可以對父類中的方法進行擴充,以增強自己的功能,這樣就稱之為重寫,也稱為複寫或者覆蓋。所謂方法重寫就是子類的方法和父類中繼承下來的方法具有完全相同的方法名、傳回值類型、方法的參數個數以及參數類型,這樣才能被稱為方法重寫。
代碼體現:
// 這是父類的定義
public class Person {
public void eat() {
System.out.println("=====這是父類Person的eat方法=======");
}
}
// 這是子類的定義
public class Student extends Person {
@Override
public void eat() {
System.out.println("===這是子類Student的eat方法===");
}
// main方法測試
public static void main(String[] args) {
Student student = new Student();
student.eat(); //輸出:===這是子類Student的eat方法===
}
}
子類重寫父類的方法後,在執行個體化子類的時候則調用的是子類中的方法,父類的方法就如同被覆蓋了一樣。如果在子類中需要調用父類的方法,則在子類方法中使用super關鍵字調用父類的方法,格式:super.父類中的方法名(參數列表)。
重寫規則:
在進行方法重寫的時候需要遵循以下規則才能實現方法重寫:
(一)子類方法的參數列表必須和父類中被重寫的方法的參數列表相同(參數個數和參數類型),否則只能實現方法的重載。
(二)子類方法的傳回值類型必須和父類中被重寫的方法傳回值類型相同,否則只能實現方法重載。
(三)在Java規定,子類方法的存取權限不能比父類中被重寫的方法的存取權限更小,必須大於或等於父類的存取權限。
(四)在重寫的過程中,如果父類中被重寫的方法拋出異常,則子類中的方法也要拋出異常。但是拋出的異常也有一定的約束--->子類不能拋出比父類更多的異常,只能拋出比父類更小的異常,或者不拋出異常。例如:父類方法拋出Exception,那麼子類就只能拋出IOException或者拋出比Exception小的異常或者不拋出異常。
二、方法重載(Overload)
在Java中如何定義重載:在Java中通過在類中寫多個方法,這類方法的方法名相同,方法的參數列表不同(參數的個數和參數類型的不同)來事現方法的重載。所謂方法重載就是:在一個類中,有一系列的方法具有方法名相同,但參數列表不同,這類方法的現就是方法重載。注意構造方法也可以重載。
代碼體現:
// 這是父類的定義
public class Person {
/*
* protected void eat() throws Exception{
* System.out.println("=====這是父類Person的eat方法======="); }
*/
public Person() {
System.out.println("這是無參構造方法");
}
public Person(String name) {
System.out.println("這是有一個參數的構造方法參數name=" + name);
}
void print() {
System.out.println("====無參print方法====");
}
void print(String str) {
System.out.println("====有一個參數的print方法====");
}
void print(String str, int a) {
System.out.println("====有兩個參數的print方法====");
}
}
在對象調用這些方法的時候,Java VM會根據不同的參數列表來執行不同的方法體,這就是多態的一種體現。
重載規則:
在進行方法重載的時候需要遵循以下的規則:
(一)再使用方法重載的時候,必須通過方法中不同的參數列表來實現方法的重載。如:方法的參數個數不同或者方法的參數類型不同。
(二)不能通過存取權限,傳回值類型和拋出的異常來實現重載
(三)方法的異常類型和拋出異常的數目不會影響方法的重載,也就是說重載的方法中允許拋出不同的異常
(四)可以有不同的傳回值類型,只要方法的參數列表不同即可
(五)可以有不同的存取修飾詞
三、重寫與重載的區別
區別點 |
重載 |
重寫(覆寫) |
英文 |
Overloading |
Overiding |
定義 |
方法名稱相同,參數的類型或個數不同 |
方法名稱、參數類型、傳回值類型全部相同 |
對許可權沒有要求 |
被重寫的方法不能擁有更嚴格的許可權 |
範圍 |
發生在一個類中 |
發生在繼承類中 |
注意:構造方法不能被繼承,因此不能被重寫,在子類中只能通過super關鍵字調用父類的構造方法;但是可以被重載。
主要參考文章串連:http://blog.csdn.net/zhangyabinsky/article/details/7047330
主要說明方法重寫和方法重載的區別,給Java初學者學習學習!