当前位置: 首页 > 知识库问答 >
问题:

将对象从父类类型化到子类

郜德容
2023-03-14

我对Java语言中的类型化有一个误解。问题是ClassCastException。例如,在这段代码中,假设动物是Dog类的父类,

Animal animal = new Animal();
Dog dog = (Dog) animal;
EditText editText = (EditText) findViewById(R.id.edit_message);

共有1个答案

昌砚
2023-03-14

一旦创建了对象,就不能更改其类型。这就是为什么你不能把动物投给狗。

但是,如果创建子类的对象,则可以在超类类型的变量中保留对它的引用,以后可以将其强制转换为子类类型。

这将起作用:

Animal a = new Dog ();
Dog d = (Dog) a;

在Android示例中,您有一个布局资源,如下所示:

<EditText
    android:id="@+id/edit_message"
 ..."/>

这个定义将导致Android创建edittext实例,因此可以将findviewbyid返回的视图强制转换为edittext。不能将其强制转换为edittext的超类型。

 类似资料:
  • 问题内容: 我有以下课程 这只是我实际架构的简化版本。最初,我不知道需要创建的人员类型,因此处理这些对象创建的函数将常规对象作为参数。 现在,我想使用此父类对象访问子类的方法。我还需要不时访问父类方法,所以 我不能 使其 抽象 。 我想我在上面的示例中简化太多了,所以这是实际的结构。 if语句显示“无法为QuestionOption找到getMultiple”。OuestionOption具有更多

  • 我正在修改open JDK以添加特性,我已经遇到了两次,但没有好的解决方案。

  • 当我们实例化子类对象时,父类的构造函数也会被调用。那么它是父类的对象的创建吗?

  • 我试图在Scala中返回抽象泛型类的子类,但它无法编译。我得到A类型的表达式不符合预期的B类型。这是我使用的代码: 创建()的签名应该是什么? 谢谢

  • 问题内容: 我正在向我的朋友解释OOP。我无法回答这个问题。(我有多可耻? 我只是想逃避,因为OOP描绘了现实世界。在现实世界中,父母可以容纳孩子,但孩子不能容纳父母。OOP也是如此。我知道它很愚蠢。:P 为什么此陈述无效? 因为aChild的成员是aParent成员的超集。那为什么孩子不能容纳父母。 问题答案: 正是因为aChild是aParent功能的超集。你可以写: 因为每只狐狸都是动物。但

  • 问题内容: 分配;不会产生编译错误,但在运行时会生成。为什么编译器无法检测到此错误? 问题答案: 通过使用强制转换,你实际上是在告诉编译器“相信我。我是专业人士,我知道我在做什么,我知道尽管不能保证,但是我告诉你这个变量肯定是会成为一只狗。” 由于动物实际上不是狗(它是动物,你可以做;,也可能是狗),因此VM在运行时会引发异常,因为你违反了这种信任(你告诉编译器一切都会好的,并且不!) 编译器比盲