java - 无法强制转换为子类

时间:2015-09-07 06:00:21

标签: java oop casting

我在这个结构中有两个实体:

class Parent{
   public int type;
   //Setters and getters
}

class Child1 extends Parent{

}

我有一个Parent的实例,我希望以这种方式根据条件将其转换为Child1

Parent parent = ...
if(parent.getType() == 1)
    Child1 child = (Child1) parent;

但它给了我ClassCastException。我该如何解决这个问题?什么是在java中使用向下转换的最佳方法?

5 个答案:

答案 0 :(得分:2)

您无法将父类型对象强制转换为子类型对象。你有误解了继承行为。

答案 1 :(得分:1)

只有当的对象属于该类型的对象时,才可以转换为子类。

对象的强制转换不会更改对象类的对象。它只是告诉编译器“这个对象实际上是子类的一个实例,使用它就是这样”。 (基本类型的转换是不同的,它们实际上改变了值的类型!)

在您的代码示例中,您没有显示parent对象是如何创建的,因此我不知道这是否真的是问题所在。也许你可以添加遗漏的代码来清楚说明。

答案 2 :(得分:0)

你可以将动物类投射到狗类吗?即使你知道还有更多动物的例子。 它只是狗是一种动物,这就是为什么你可以把它投入动物但狗不是动物

答案 3 :(得分:0)

您需要使用:

Parent parent = new Child1();

答案 4 :(得分:0)

你没有正确创建对象,像这样创建对象 父子=新Child1();