重寫(Override)與重載(Overload)

前言

雖然編寫代碼,尤其是繼承類或實現接口時,經常用到了註解 @Override ,但對其中文書面語的翻譯很模糊——是重寫、覆寫還是重載?以至於多次在看書或讀博客時,看到重寫與重載都要犯迷糊。所以下定決心一定要把這兩個概念弄明白。

重寫

Override 翻譯爲 覆寫 或者 重寫 都可以,它指在子類在繼承父類時,如果父類已經存在一個方法 ,子類可以繼續沿用該方法,但必須保證在子類中該方法的 方法簽名 與父類的 方法簽名 必須一致,且必須要保證子類中該方法的 返回值類型 要麼是父類該方法的 返回值類型,要麼是父類該方法的 返回值類型 的子類型。在Java中 方法簽名 相同可以方法的簡單地理解爲如果兩個方法的 方法名參數個數參數類型順序 都相同,那麼我們就稱這兩個方法的 方法簽名 相同

常用的重寫案例

interface  Operation{
	public int operate(int a, int b);
}

class Addition implements Operation{
	@Override
	public int operate(int a, int b){
		// 方法簽名與返回值類型均與父類相同
		
		return a + b;
	}
}

符合規則的重寫案例(返回類型不一致)

/**
	獎勵
*/
class Award{

}

/**
	現金
*/
class Cash extends Award{

}

class Task {

}


/*-----------------------------------------------------------------------*/

/**
	比賽
*/
class Competition{
	public Award compelete(Task task){
		// 贏得比賽,獲得獎勵
		return new Award();
	}
}

/**
	買彩票
*/
class Lottery extends Competition{
	@Override
	public Cash compelete(Task task){
		// 中獎,獲得現金
		return new Cash();
	}
}

重載

重載 在編程語言中對應的英語術語爲 Overload 。它指在同一個類中,可以定義同名的方法,但是這些方法的 參數個數 或者 參數類型順序 必須不一致,返回值類型 是否相同並不做要求。

一個簡單的重載案例

class Addition {
	public int operate(int a, int b){
		return a + b;
	}

	public long operate(long a, long b){
		// 與第一個函數的 參數類型 不一致
		
		return a + b;
	}

	public int operate(int a, int b, int c){
		// 與第一個函數的 參數個數 不一致
		
		return a + b + c;
	}

	public int operate(int a, char b){
		// 與第一個和第二個函數的 參數類型 不一致
		
		return a + b;
	}

	public int operate(char a, int b){
		// 與第四個函數的 參數類型順序 不一致
		
		return a + b;
	}
}
發佈了24 篇原創文章 · 獲贊 7 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章