gpt4 book ai didi

具有父类(super class)和子类的 Java 克隆

转载 作者:行者123 更新时间:2023-12-02 10:48:17 26 4
gpt4 key购买 nike

我有两个简单的 Java 类,我试图了解更多有关克隆以及如何在不同级别的类之间进行转换的信息。这是父类(super class)车辆。

public class Vehicle implements Cloneable 
{
public int x;

public Vehicle(int y) {
x = y;
}

@Override public Object clone() {
Object result = new Vehicle(this.x);
// Location "A"
return result;
}
}

这是卡车子类

public class Truck extends Vehicle 
{
private int y;

public Truck(int z) {
super(z);
y = z;
}

@Override public Object clone() {
Object result = super.clone();
System.out.println(result.getClass());
((Truck) result).y = this.y;
return result;
}
}

我试图在使用父类(super class)进行克隆时获取 Truck 的副本,但遇到不允许向下转型的问题。我不太确定如何解决这个问题或错误在哪里。

我希望: Truck a = new Truck(1) 和 Truck b = a.clone() 成为同一个对象。

最佳答案

您滥用了clone()。当您实现 Cloneable 时,所有实例化和字段复制都是由 super 实现完成的。您的 Vehicle 实现应如下所示:

@Override
public Vehicle clone() {
try {
return (Vehicle)super.clone();
} catch (CloneNotSupportedException e) {
throw new AssertionError();
}
}

您可以选择在 Truck 中覆盖它,如下所示:

@Override
public Truck clone() {
return (Truck)super.clone();
}

关于具有父类(super class)和子类的 Java 克隆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52377601/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com