所以我正在玩铸造......我似乎遇到了问题。
class Rabbit implements Cloneable {
private int r;
public Rabbit(int y) {
r= y;
}
public Object clone() {
Object result = new Rabbit(this.r);
return result;
}
class Bunny extends Rabbit {
private int b;
public Truck(int z) {
super(z);
b = z;
}
public Object clone() {
Object result = super.clone();
(Bunny) result).b = this.b;
return result;
}
为什么我在实施过程中不断获得classcastexception?
答案 0 :(得分:0)
了解在Java中(someType)
的“强制转换”符号用于三种不同的(并且很大程度上不相关)的事情:
int
转换为char
时。在这种情况下,可以修改实际值(例如,通过修剪无关位)。int
转换为Integer
。第三种用途就是你所关心的。重要的是要理解,与其他两个不同,它不会以任何方式修改对象引用或对象本身的运行时值。相反,它告诉编译器(和JVM“验证器”)“嘿,编译器,我知道这个引用被声明为ObjectA引用,但它确实引用了一个ObjectB - 相信我!”因此编译器接受该语句,但JVM是一个不信任的灵魂,坚持在运行时检查。如果引用的对象不是ObjectB(或ObjectB的某个子类),则抛出ClassCastException。