2015-12-31 35 views
-4

請看下面的代碼AutoBoxing /拆箱不適用於返回類型?

public class Parent { 
    public Object doSomething() { 
     return null; 
    } 
} 

class Child extends Parent { 
    public Integer doSomething() { 
     return 0; 
    } 
} 

這是完美的下協方差和編譯罰款。

凡爲

public class Parent { 
    public Integer doSomething() { 
     return null; 
    } 
} 

class Child extends Parent { 
    public int doSomething() { 
     return 0; 
    } 
} 

不進行編譯。但是它可以很容易地在自動裝箱和拆箱的情況下自行改造嗎?

+1

有點類似於子類:在Java中,是有可能重寫方法,如果返回類型分別爲一個原始的和它的包裝類?](http://stackoverflow.com/questions/27701092/in-java-is-it-possible-to-override-methods-if-return-types-are-respectively-ap) –

+0

@RahulTripathi嗯..我的靈感來自我以前回答的問題:)。試圖刪除,我不能刪除。將它標記爲重複:) –

回答

1

在第一個情況下的代碼編譯因爲Java支持Covariance這意味着,

如果貓是動物的子類型,則類型貓的表達可用於每當型動物的表達可以。

根據第一種情況是好的。

來到第二種情況下,

Autoboxing是自動轉換,Java編譯器使得原語類型和它們的相應的對象的包裝類之間。例如,將int轉換爲Integer,double轉換爲Double等等。

這是一個包裝之間有直接的關係,它是原始的,這並不意味着intInteger

int ---> Integer //conversion, not subtype