我决定从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 –
研究多态语句,并按照上述注释 –