我对用Java语言进行类型转换有误解。问题是ClassCastException。例如,在此代码中,假设Animal是Dog类的父类,
动物动物= new Animal();
狗狗=(狗)动物;
执行后抛出ClassCastException。但是,在研究android程序包时,我发现了一个有关类型转换的示例,考虑到该Java示例,应该抛出ClassCastException。
EditText editText =(EditText)findViewById(R.id.edit_message);
在此代码中,findViewById方法返回一个View类对象,该对象是EditText类的超类之一。(从android.view.View到android.widget.EditText)该代码运行良好。谁能解释我是否犯了错或如何发生?
提前致谢。
创建对象后,就无法更改其类型。这就是为什么您不能将动物投向狗的原因。
但是,如果创建子类的对象,则可以在超类类型的变量中保留对它的引用,然后将其转换为子类类型。
这将起作用:
Animal a = new Dog ();
Dog d = (Dog) a;
在Android示例中,您具有一个如下所示的布局资源:
<EditText
android:id="@+id/edit_message"
..."/>
此定义将导致Android创建的实例EditText
,因此您可以将返回的视图转换findViewById
为EditText
。您不能将其转换为不是的超类型的其他任何对象EditText
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句