Java ClassCastException的真实示例

Java ClassCastException的真实示例,java,classcastexception,Java,Classcastexception,在一次采访中,我被要求给出一个ClassCastException的例子,我给出了下面的例子 class X{} class Y extends X{} class Z extends X{} Y y=new Y(); Z z=new z(); (X)y是可能的 (X)z是可能的 Z(y)和(y)Z将抛出ClassCastException。 然后面试要求我给出一个真实世界的例子,我说船和桌子都是木头做的 桌子伸出木头 船伸木头 但你们不能用桌子来钓鱼,同样你们也不能用桌子来站住 我想知道我的

在一次采访中,我被要求给出一个ClassCastException的例子,我给出了下面的例子

class X{}
class Y extends X{}
class Z extends X{}
Y y=new Y();
Z z=new z();
(X)y
是可能的
(X)z
是可能的

Z(y)
(y)Z
将抛出ClassCastException。 然后面试要求我给出一个真实世界的例子,我说船和桌子都是木头做的

桌子伸出木头 船伸木头 但你们不能用桌子来钓鱼,同样你们也不能用桌子来站住


我想知道我的例子是否正确?

我不会接受这个答案,因为船/桌子不是木头的子类型。
木材的子类型可能是橡木或樱桃木。

z=(z)y
不会抛出
ClassCastException
——它永远不会编译

下面将编译并在第二行抛出ClassCastException(
java.lang.ClassCastException:[LXXX$Y;不能强制转换为[LXXX$Z;

    X[] xx = new Y[1];
    Z[] zz = (Z[]) xx;
本着同样的精神

   Object obj  = new Integer(0);
   String str = (String) obj; // class cast exception here

(Z)y
和您的其他示例将无法编译。
Z
y
不在同一继承树中。此外,尝试编译该代码并运行该代码以查看发生了什么情况也很简单。只需执行即可。
X=new y();
(Z)x
将导致
ClassCastException
@downvoter如果你不喜欢我的问题,只需写一条评论,我将删除我的帖子@SotiriosDelimanolis指出的可能的副本。你的例子很难用来创建一个编译示例,它将在运行时因ClassCastException而失败。这更常见运行类似于
xy=newy();xz=newz();(z)y、 
典型的例子是关于
动物及其特化的。
狗是
动物,猫也是
动物。
动物可以走路,所以
猫和
狗可以走路。
狗可以走路,走路的方法和猫或者任何
狗一样伊玛尔
,所以你可以假装猫
和狗
在走路的时候没有区别。但是你不能假装猫是狗来让猫
吠叫。不过他确实得到了这个概念。船/桌子不是子类型,而是像木头一样间接扩展的整数扩展Object@Bauss,我同意。这不是一个概念上的错误,而是一个技术上的错误。对不起,但我不同意。在一个程序中,工件之间有许多可能的关系,在实现时,人们必须选择在哪里使用哪个关系。当然,木头和桌子之间有一些关系,但在大多数(现实世界)中案例这并不是一种专门化。这可能是另一种关联。因此,作为面试官,我不确定答案是否只是技术上的错误或真正的误解。@rocking,不使用木材就可以创造一艘船。没有对象就不能创造一个整数。为什么要把事情复杂化呢数组?更简单:
xy=newy();zz=(Z)y;