過載overload和重寫override的區別

2022-05-24 17:03:08 字數 979 閱讀 6054

public class methodoverridevsoverload 

/*** @param args

*/public static void main(string args)

if(o3.equals(o4))

}}

結果輸出是:

methodoverridevsoverload

object o3 and o4 is equal.

為什麼會這樣呢?

首先要搞清楚過載和重寫的關係。

過載指的是同乙個類中,方法名相同但形參列表不同,過載是編譯時靜態繫結的。

重寫則是指,子類覆蓋父類的同名方法,重寫是執行時動態繫結的。

對於子類重寫的要求如下:

引數列表,返回值(可以是子類)均不可變。

可以丟擲更少的異常,但不可丟擲父類未宣告的異常。

訪問許可權比起父類要更寬鬆。

執行時根據物件型別來決定呼叫的方法。

看回程式,public boolean equals()方法看起來是跟object的equals方法有點像,實際上形參不一樣,所以這裡應該是方法過載而不是重寫。

o1,o2實際上是呼叫了object的equals方法,因為他們的編譯時型別是object,而o3,o4則是呼叫methodoverridevsoverload的方法。

怎樣解決這個問題呢?

使用乙個annotation來進行說明,@override,當用了這個annotation時,因為形參列表不一樣,則會報錯。

@override

public boolean equals(object other)

這時候的結果是:

methodoverridevsoverload

object o1 and o2 is equal.

methodoverridevsoverload

object o3 and o4 is equal.

過載overload和重寫overried的區別

過載 是指允許存在多個同名函式,而這些函式的參數列不同 或許引數個數不同,或許引數型別不同,或許兩者都不同 編譯器根據函式不同的引數列表,對同名函式的名稱做修飾,然後這些同名函式就成了不同的函式。有兩個同名函式int func int 和int func string 那麼編譯器做過修飾後的函式名稱...

過載(Overload)和重寫(Override)

public void test int a public string test int a,string b class animal class dogextends animal public class test 執行結果 動物可以移動 狗可以跑animal b new dog 大家可能有...

過載(overload 和重寫(override)

重寫方法的過載和方法的重寫的區別 對於類似的多個方法,全部都是執行類似的操作,但是因為引數列表不一樣,所以需要記住的名字太多。使用方法過載可以很好的解決這個問題。對於類似功能的多個方法,只要記住乙個方法名即可,可以自動的根據引數列表中引數的個數的不同來適配。方法過載 overload 方法名相同,但...