首页 > 解决方案 > 在 Button 和扩展 Button 的自定义类 MyButton 之间进行转换时出错

问题描述

我正在使用 Android Studio 开发一个 android 应用程序。我编写了一个名为“MyButton”的自定义类,它扩展了 Button。我还有一个带有几个按钮的资源文件。在执行时,我收到一个异常,说我无法将 Button 转换为 MyButton。该行是:

myButton = (MyButton) view.findViewById(R.id.button1);

button1 是资源文件中声明的 Button 的 id。myButton 是 MyButton 类类型的数据。

标签: androidandroid-layout

解决方案


你不可以做这个。

因为您使用 Button 创建了 MyButton。Button 是独立的,但 MyButton 依赖于 Button。当你声明

MyButton button = (Button) findByElementById()

它会导致编译器错误。因为编译器知道 MyButton 是一个 Button Only Button 不是 MyButton。

但你可以这样做

Button button = new MyButton()

因为 MyButton() 是一个 Button()

或者

Button button = (Button) new MyButton() 

但是在这里您不需要将 MyButton() 转换为 Button() 因为编译器已经知道 MyButton() 是 Button()

在java中你只能向上转换和向下转换。看看 Java Downcasting 和 Upcasting 规则会让你更清楚


推荐阅读