在此代碼中需要轉換爲Bar
。我試圖瞭解它避免了什麼問題。如果編譯器將讓我用Foo
作爲Bar
沒有鑄造,豈不是能夠使用Bar
可能具有的擴展功能?還是有更重要的原因?或者,這個例子太簡單了,無法解釋爲什麼我必須施放?鑄造有什麼保護措施?
class Foo { }
class Bar extends Foo { }
public class Main {
public static void main(String[] args) {
Foo f1 = new Bar();
Bar b1 = (Bar) f1;
}
}
我們可以寫一個簡單的例子,我看的明白,如果我不投會有麻煩?我可以認爲運行時可以幫助自己而不用在上面的代碼中投射,但是我當然沒有理解爲什麼我必須執行投射的深刻細節。
最簡單的例子:'1/2'將導致0,除非你施放他們中的一個將翻一番,所以在代碼'2 /(1/2)'你可以,如果你不投得到一個異常。 – Maroun
你應該看看javas [多態](https://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html),這是強制你在這種情況下投射的概念。 –