考虑c1是c3的基类。以下代码完美无缺。
c1 obj1=new c3();
c3 obj2=(c3)obj1;
但是,下面有一个ClassCastException
c1 obj1=new c1();
c3 obj3=(c3)obj1;
我错过了什么?
答案 0 :(得分:1)
我认为发生的事情是你正在创建obj1作为c1的一个实例,然后尝试将它转发到继承链下面的类而不是c1。
在你的第一个例子中,c1是c3的基本类型,因此你可以创建一个c3的实例,其中类型为c1..that,这很好。 c3是c1的子元素,因此继承了它的所有属性和方法。
但是,在第二个示例中,您将创建一个c1类型为c1的实例。然后你试图把它投射到它的孩子身上。子类可能具有父母没有的其他属性和方法。
总而言之,一个孩子可以是其父类型并且可以投射到它,但是,父母不能是它的孩子,不能这样做。
如果您需要进一步澄清,请与我们联系。