2014-01-29 74 views
3

如下圖所示:如果重寫方法的返回類型是原始的(例如double),我們可以改變重寫方法的返回類型(例如int,char)嗎?

方法被覆蓋:

double add (int a ,int b){ 

} 

方法overridding上述方法:

int add(int a,int b){ 

} 
+6

爲什麼你不能只是試試呢? –

+0

看起來你缺少一些代碼。你能否更新這個? –

+0

不,這樣做意味着如果調用子類的方法,任何使用超類接口的人都會收到一個無效值。 –

回答

8

使用原始類型是不可能的,但是在JDK 1.5中添加了一個名爲covariant return types的功能。所以,使用這個特性,子類可以返回比父類聲明的類型更具體的類型。

下面的代碼在JDK 1.7

public static class A { 
    Number go() { return 0; }; 
} 

public static class B extends A { 
    @Override 
    Integer go() { return 0; } 
} 

編譯罰款見JLS Example 8.4.8.3-1. Covariant Return Types

2

否,則不能改變返回類型。您可以通過提供備用或附加輸入來重載方法。

int add(int a, int b, int c) 
1

另一種解決方案將是使基類型參數化類型,並且當擴展或實例化斷言的返回類型。

相關問題