1. 程式人生 > >為什麼不能通過返回值型別區分過載?

為什麼不能通過返回值型別區分過載?

因為呼叫時不能指定類資訊,編譯器不知道你要呼叫哪個類。

float max(int a, int b);
int max(int a, int b);

當呼叫max(1, 2);時無法確定呼叫的是哪個,單從這一點上來說,僅返回值型別不同的過載是不應該允許的。

再比如對下面這兩個方法來說,雖然它們有同樣的名字和自變數,但其實是很容易區分的:
void f() {} 
int f() {} 

若編譯器可根據上下文(語境)明確判斷出含義,比如在 int x=f()中,那麼這樣做完全沒有問題。然而,
我們也可能呼叫一個方法,同時忽略返回值;我們通常把這稱為“為它的副作用去呼叫一個方法”,因為我
們關心的不是返回值,而是方法呼叫的其他效果。所以假如我們象下面這樣呼叫方法:
f();

Java 怎樣判斷f()的具體呼叫方式呢?而且別人如何識別並理解程式碼呢?由於存在這一類的問題,所以不能
根據返回值型別來區分過載的方法。

函式的返回值只是作為函式執行之後的一個“狀態”
他是保持方法的呼叫者與被呼叫者進行通訊的關鍵。
並不能作為某個方法的“標識”