我決定從Android
應用模擬本實施例中的代碼:角色異常錯誤
TextView txt = (TextView) findViewById(R.id.activity_display_message);
findViewById
返回View
對象,然後我們將它轉換爲一個TextView
一個(TextView
是View
子類)
看來我誤解了它是如何工作的。我期待這個代碼的工作,因爲C extends B
,因此我應該downcast B
對象C
。
但我在運行時遇到了異常,我無法將B
轉換爲C
。
那麼任何人都可以解釋我錯在哪裏?以及爲什麼Android
樣本有效?
public class A{
public static void main(String[] args){
B b = new B();
b.f();
C c = (C)b;
}
}
class B{
public void f(){
System.out.println("Class B");
}
}
class C extends B{
public void f(){
System.out.println("Class C");
}
}
如果對象的*執行時間類型*與您嘗試投射到的類型不匹配,則投射將失敗。在你的情況下,它不會,因爲你正在創建一個'B'的實例。在Android情況下,可能涉及的對象實際上是一個「TextView」。請參閱https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html –
研究多態語句,並按照上述註釋 –