淺談java中的重載和重寫的區別

1.重載

重載指在一個類中,具有多個相同名稱的方法,他們的參數列表卻不相同

(參數類型不同、參數個數不同甚至是參數順序不同)

重載對返回類型沒有要求,可以相同也可以不同,但是不能返回類型來判斷他們是否是重載。

例如

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,不過有參數"+ name);
	}
}

小結:

1.重載是一個類中多態性的一種表現

2.重載是在一個類中,具有相同名稱不同參數列表的方法

3.重載不能根據返回類型的相同或者不同來區分重載函數。

2.重寫

1.重寫是指在不同類中,將父類的方法在子類中重新寫一遍,子類繼承瞭父類原有的方法,但有時又不想繼承父類原有一模一樣的方法,所以就在返回類型,方法名,參數列表相同的情況下,對方法體進行修改進行重寫,這就是重寫。但註意的是 子類的訪問修飾符不能比父類的更嚴格(意思就是父類的訪問修飾符要更加 嚴謹,權限更少,父親嚴格)

例如

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("我是兒子的方法");
	}
}

返回結果是

小結:

1. 發生在父類和子類關系之間

2. 他們的返回類型,方法名,列表參數相同 方法體不同。

3.子類不能比父類更嚴格 ,(父親比兒子嚴格)。

4重寫方法一定不能拋出新的檢查異常或者比被重寫方法申明更加寬泛的檢查型異常

訪問修飾符圖

private 最嚴格。

private : 在同一類內可見。使用對象:變量、方法。 註意:不能修飾類(外部類)

default (即缺省,什麼也不寫,不使用任何關鍵字): 在同一包內可見,不使用任何修飾符。使用對象:類、接口、變量、方法。

protected : 對同一包內的類和所有子類可見。使用對象:變量、方法。 註意:不能修飾類(外部類)。

public : 對所有類可見。使用對象:類、接口、變量、方法

總結重載和重寫的區別:

答:方法的重載和重寫都是實現多態的方式 ,區別在於重載實現的是編譯時的多態性,重寫實現的運行時的多態性。

重載是在發生在同一個類中,他們有相同的方法名 ,但有不同的參數列表,重載對返回類型沒有特別要求,不能根據返回類型來進行區分 。

而重寫發生在不同類中,發生在子類和父類之間的,重寫要求子類與父類的被重寫方法具有相同的返回類型,名稱和參數列表。 但他們的方法體要不同。 同時,父類相較於子類,他的訪問修飾符會更加嚴格,即訪問范圍更小。比父類被重寫方法更好訪問,不能比父類被重寫方法聲明更多的異常(裡氏代換原則) 。

總結

本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: