class 铸造是如何工作的?

How does class casting work?

考虑 c1 是 c3 的基础 class。以下代码完美运行。

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

但是,在下面的一个中有一个ClassCastException

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

我错过了什么?

我认为正在发生的事情是您将 obj1 创建为 c1 的实例,然后尝试将其转换为 class 在继承链中比 c1 更靠下的位置。

在您的第一个示例中,c1 是 c3 的基类型,因此您可以创建类型为 c1 的 c3 实例..没问题。 c3 是 c1 的 child,因此继承了它的所有属性和方法。

但是,在第二个示例中,您正在创建类型为 c1 的 c1 实例。然后您试图将其转换为 child。 child class 可能具有 parent 所没有的其他属性和方法。

总而言之,child 可以是它的 parent 类型并转换为它,但是,parent 不能是它的 child 并且不能转换为这样的

如果您需要进一步说明,请告诉我。