2014-07-15 38 views
2

是否有任何情況下,在OpenJDK 1.7.0_45中,Derived類重寫基類的方法,但沒有@Override註釋,並且在運行時,派生類的實例將調用基類'方法?OpenJDK @Override缺失問題

class Base { 
    public f() { 
    } 
} 

class Derived { 
    public f() { 
    } 
} 

Derived類的方法不調用基類的方法。

順便說一句,相同的代碼在Oracle JDK1.7上運行良好。

+0

您可以使用openjdk或oracle jdk進行編譯,並在openjdk或oracle jdk下運行。這是什麼時候發生的?只有你們都編譯並運行openjdk? – flup

+0

@flup,我在Oracle JDK中編譯了這兩種情況。這是問題嗎? – jlming6

+0

不,這應該很好,我只是想知道它究竟發生了什麼。 – flup

回答

1

不,您可以see in the Javadocs,@Override具有SOURCE保留,並且只能作爲編譯時保護。字節碼不會有任何不同。另請參見How to identify override method in Java byte code?

+0

謝謝@flup。 我無法提供更多的上下文。但在我的情況。 如果我沒有添加Override註解,將會調用超類方法,但是如果我添加Override註解,派生類方法將被調用,這很奇怪。 – jlming6

+0

@yilinghello確實很奇怪,贊同! – flup

0

我不確定是否正確理解問題,但是override-annotation不控制在運行時調用哪個方法。 所以確定你可以調用基類方法。只需調用super.f()。

+0

謝謝@Seb,請參閱我在flup答案中添加的評論。 – jlming6