课堂演员如何运作?

时间:2016-07-19 11:38:50

标签: casting classcastexception

考虑c1是c3的基类。以下代码完美无缺。

    c1 obj1=new c3();
    c3 obj2=(c3)obj1;

但是,下面有一个ClassCastException

    c1 obj1=new c1();
    c3 obj3=(c3)obj1;

我错过了什么?

1 个答案:

答案 0 :(得分:1)

我认为发生的事情是你正在创建obj1作为c1的一个实例,然后尝试将它转发到继承链下面的类而不是c1。

在你的第一个例子中,c1是c3的基本类型,因此你可以创建一个c3的实例,其中类型为c1..that,这很好。 c3是c1的子元素,因此继承了它的所有属性和方法。

但是,在第二个示例中,您将创建一个c1类型为c1的实例。然后你试图把它投射到它的孩子身上。子类可能具有父母没有的其他属性和方法。

总而言之,一个孩子可以是其父类型并且可以投射到它,但是,父母不能是它的孩子,不能这样做。

如果您需要进一步澄清,请与我们联系。