我正在學習Java SE 7認證考試,我正在做一些關於繼承和訪問修飾符無聊的練習。奇怪的行爲擴展抽象類(練習)
但現在我得到了一個應用繼承的意外行爲。在我基礎包com.testpkg
我有一個抽象類:
package com.testpkg;
public abstract class Abstract {
public int test();
}
注意我自願省略了abstract
修改爲test()
方法。
然後我在包com.testpkg.sub
延伸Abstract
的具體類:
package com.testpkg.sub;
public class Concrete extends Abstract {
public int test() {
return 0;
}
}
我使用測試這個類:
package com.testpkg;
import com.testpkg.sub.Concrete;
public class TestMain {
public static void main(String[] args) {
Abstract c = new Concrete();
System.out.println(c.test());
}
}
如果我嘗試編譯此,我明明得到兩個錯誤:
The method test() requires a body instead of a semicolon
但是我f我運行測試課:0
被打印在控制檯上!
這對我來說似乎很奇怪。你能解釋爲什麼代碼在工作,即使在Abstract
類中錯誤地聲明test()
?
注意我正在使用Eclipse IDE編譯/運行我的代碼。
如果代碼沒有編譯,它的運行情況如何? – Boj
@我正在使用Eclipse。它提醒編譯錯誤存在,但允許我運行代碼。 – davioooh
我相信這就是你的問題的答案。 Eclipse允許您運行「半打」代碼。這裏運行良好的原因是因爲在運行時你永遠不會真正依賴'Abstract'類的細節,所以如果你有這種類型的編譯錯誤並不重要。 – aioobe