2015-09-07 47 views
0

我在这个结构中的两个实体:爪哇 - 无法投射到子类

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中使用向下转换的最佳方式是什么?

+0

检查LSP原理https://en.wikipedia.org/wiki/Liskov_substitution_principle –

+1

我假设你在Child1的构造函数中将type设置为1?如果是这样,这是一个相当重要的细节。 –

+0

为什么你不想使用'instanceof Child1'作为你的条件? –

回答

2

您不能将父类型对象转换为子类型对象。你误导了继承行为。

0

你能铸造动物类到狗类?即使你知道还有更多动物的例子。 它只是狗是一种动物这就是为什么你可以把它投给动物但狗不是动物

0

您需要使用:

Parent parent = new Child1(); 
1

强制转换为子类是唯一可能的,如果对象已经是该类型的

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

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

0

您还没有正确创建对象,请创建这样的对象 Parent child = new Child1();