我有一個「理論」的問題,但這是爲了瞭解java
編譯規則(或解釋器也許)背後的東西。java解釋器和編譯規則違規
假設我們有下面的代碼:
class A {}
class B extends A {}
class X {
public B getValue(){return null;}
}
class Y extends X {
public A getValue(){return null;} //compilation error here
}
class Z {
public List<A> getAList(List<B> x) {return x;} //compilation error here
}
注意:我知道什麼是語法錯誤,以及如何解決這些問題。
我的問題是:
- 什麼可能發生在運行時,如果我們將「忽略」(理論上)編譯器錯誤?這個語法錯誤意味着什麼?
- 爲什麼違反規則會導致運行時錯誤?
未定義的行爲,我想。所有類型的東西都不能正常工作(多態,虛擬方法調度等),這就是爲什麼一組規則被確定到你的代碼應該遵守的地方(JLS)。沒有人想知道由於「完全理論化」而忽略這些編譯錯誤所導致的確切問題。因此:未定義。 –
@JeroenVannevel - 「未定義的行爲」不是我正在尋找的答案。我編輯了這個問題,使其更清晰 –
它可能不是你要找的東西,但我懷疑你會得到任何其他東西。你問的行爲從字面上沒有定義,所以你只能猜測這個假設情況。也許錯誤的方法被執行?也許運行時開始拋出錯誤?誰知道。 –