是否有任何情況下,在OpenJDK 1.7.0_45中,Derived類重寫基類的方法,但沒有@Override註釋,並且在運行時,派生類的實例將調用基類'方法?OpenJDK @Override缺失問題
class Base {
public f() {
}
}
class Derived {
public f() {
}
}
Derived類的方法不調用基類的方法。
順便說一句,相同的代碼在Oracle JDK1.7上運行良好。
是否有任何情況下,在OpenJDK 1.7.0_45中,Derived類重寫基類的方法,但沒有@Override註釋,並且在運行時,派生類的實例將調用基類'方法?OpenJDK @Override缺失問題
class Base {
public f() {
}
}
class Derived {
public f() {
}
}
Derived類的方法不調用基類的方法。
順便說一句,相同的代碼在Oracle JDK1.7上運行良好。
不,您可以see in the Javadocs,@Override具有SOURCE保留,並且只能作爲編譯時保護。字節碼不會有任何不同。另請參見How to identify override method in Java byte code?
我不確定是否正確理解問題,但是override-annotation不控制在運行時調用哪個方法。 所以確定你可以調用基類方法。只需調用super.f()。
謝謝@Seb,請參閱我在flup答案中添加的評論。 – jlming6
您可以使用openjdk或oracle jdk進行編譯,並在openjdk或oracle jdk下運行。這是什麼時候發生的?只有你們都編譯並運行openjdk? – flup
@flup,我在Oracle JDK中編譯了這兩種情況。這是問題嗎? – jlming6
不,這應該很好,我只是想知道它究竟發生了什麼。 – flup