2012-03-03 99 views
1

Java和C#評估方法/函數簽名執行重寫的方式有什麼不同嗎?在Java中,父和子中的兩個方法具有相同的名稱和參數,但返回類型不同,這是錯誤 - 而在C#中,它編譯得很好。Java vs C#方法/函數返回類型重寫?

我是否認爲C#認爲這是重載,而Java嘗試覆蓋,但只允許覆蓋相同的返回類型?

+0

任何示例代碼? – 2012-03-03 21:46:53

+0

@ L.B字面上只是一個父類和子類中的方法,同名,無參數,都聲明爲protected,一個返回void,另一個int。 – user997112 2012-03-03 21:47:47

+7

你是對的:**在C#**中沒有重寫。這是*隱藏*,這是一種*重載*。如果*覆蓋*,那麼簽名必須完全匹配C#,包括返回類型。 – 2012-03-03 21:49:21

回答

0

您在Java中遇到錯誤,因爲返回類型應與原始返回類型兼容。

返回類型不是簽名的一部分。然而,當你重寫一個方法時,你應該保持返回類型兼容,在Java 5之前返回類型必須是相同的

但是現在(Java 5+)可以返回原始類型的子類,這稱爲Covariant返回類型。