我对 Java 语言中的类型转换有一个误解。问题是 ClassCastException 。例如,在这段代码中,假设 Animal 是 Dog 类的父类,
动物动物=新动物();
Dog dog =(狗)动物;
执行后抛出 ClassCastException 。然而,在研究 android 包时,我发现了一个关于类型转换的例子,考虑到那个 java 例子,它应该抛出一个 ClassCastException 。
EditText editText = (EditText) findViewById(R.id.edit_message);
在此代码中, findViewById 方法返回一个 View 类对象,它是 EditText 类的超类之一。(从 android.view.View 到 android.widget.EditText )代码运行良好。谁能解释我是否犯了错误或这是怎么发生的?
提前致谢。
原文由 mwb 发布,翻译遵循 CC BY-SA 4.0 许可协议
一旦你创建了一个对象,你就不能改变它的类型。这就是为什么你不能将 Animal 投给 Dog 的原因。
但是,如果创建子类的对象,可以在超类类型的变量中保留对它的引用,稍后可以将其强制转换为子类类型。
这将起作用:
在 Android 示例中,您有一个如下所示的布局资源:
此定义将导致 Android 创建
EditText
的实例,因此您可以将findViewById
返回的视图转换为EditText
您不能将它转换为不是超类型EditText
的任何其他类型。