1.重載
重載指在一個(gè)類中,具有多個(gè)相同名稱的方法,他們的參數(shù)列表卻不相同
(參數(shù)類型不同、參數(shù)個(gè)數(shù)不同甚至是參數(shù)順序不同)
重載對返回類型沒有要求,可以相同也可以不同,但是不能返回類型來判斷他們是否是重載。
例如
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
package HelloWorld; public class Zuoye { public static void main(String[] args) { Zuoye z = new Zuoye(); z.fangfa1(); z.fangfa1( "張旭" ); } public void fangfa1() { System.out.println( "方法1" ); } public void fangfa1(String name) { System.out.println( "也是方法1,不過有參數(shù)" + name); } } |
小結(jié):
1.重載是一個(gè)類中多態(tài)性的一種表現(xiàn)
2.重載是在一個(gè)類中,具有相同名稱不同參數(shù)列表的方法
3.重載不能根據(jù)返回類型的相同或者不同來區(qū)分重載函數(shù)。
2.重寫
1.重寫是指在不同類中,將父類的方法在子類中重新寫一遍,子類繼承了父類原有的方法,但有時(shí)又不想繼承父類原有一模一樣的方法,所以就在返回類型,方法名,參數(shù)列表相同的情況下,對方法體進(jìn)行修改進(jìn)行重寫,這就是重寫。但注意的是 子類的訪問修飾符不能比父類的更嚴(yán)格(意思就是父類的訪問修飾符要更加 嚴(yán)謹(jǐn),權(quán)限更少,父親嚴(yán)格)
例如
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package HelloWorld; public class Father { public static void main(String[] args) { Son s = new Son(); s.fangfa(); } public void fangfa() { System.out.println( "我是爸爸的方法" ); } } class Son extends Father { public void fangfa() { System.out.println( "我是兒子的方法" ); } } |
返回結(jié)果是
小結(jié):
1. 發(fā)生在父類和子類關(guān)系之間
2. 他們的返回類型,方法名,列表參數(shù)相同 方法體不同。
3.子類不能比父類更嚴(yán)格 ,(父親比兒子嚴(yán)格)。
4重寫方法一定不能拋出新的檢查異常或者比被重寫方法申明更加寬泛的檢查型異常
private 最嚴(yán)格。
private
: 在同一類內(nèi)可見。使用對象:變量、方法。 注意:不能修飾類(外部類)
default
(即缺省,什么也不寫,不使用任何關(guān)鍵字): 在同一包內(nèi)可見,不使用任何修飾符。使用對象:類、接口、變量、方法。
protected
: 對同一包內(nèi)的類和所有子類可見。使用對象:變量、方法。 注意:不能修飾類(外部類)。
public
: 對所有類可見。使用對象:類、接口、變量、方法
總結(jié)重載和重寫的區(qū)別:
答:方法的重載和重寫都是實(shí)現(xiàn)多態(tài)的方式 ,區(qū)別在于重載實(shí)現(xiàn)的是編譯時(shí)的多態(tài)性,重寫實(shí)現(xiàn)的運(yùn)行時(shí)的多態(tài)性。
重載是在發(fā)生在同一個(gè)類中,他們有相同的方法名 ,但有不同的參數(shù)列表,重載對返回類型沒有特別要求,不能根據(jù)返回類型來進(jìn)行區(qū)分 。
而重寫發(fā)生在不同類中,發(fā)生在子類和父類之間的,重寫要求子類與父類的被重寫方法具有相同的返回類型,名稱和參數(shù)列表。 但他們的方法體要不同。 同時(shí),父類相較于子類,他的訪問修飾符會更加嚴(yán)格,即訪問范圍更小。比父類被重寫方法更好訪問,不能比父類被重寫方法聲明更多的異常(里氏代換原則) 。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注服務(wù)器之家的更多內(nèi)容!
原文鏈接:https://blog.csdn.net/chengxuzx/article/details/121034510