【发布时间】:2018-10-22 19:04:39
【问题描述】:
我现在正在做一个关于继承和深度克隆的交接。
这个练习是关于使用继承和深度克隆的思想重写给我们的代码,使用一个将形状绘制到画布上的程序。
现在我已经为超类point 和我的子类group 实现了clone() 方法,但是当它编译时我总是在我的子类中得到一个CloneNotSupportedException 和clone()真的不明白为什么。
这是我的超类的代码:
public abstract class Point implements Cloneable
{
public Point clone()
{
try {
Point copy = (Point)super.clone();
copy.imgGroup = (ArrayList<Point>)imgGroup.clone();
return copy;
}
catch (CloneNotSupportedException e) {
throw new InternalError();
}
}
}
这是我的子类的代码:
public class Group extends Point implements Cloneable
{
public Group clone()
{
try {
Group copy = (Group)super.clone();
copy.group = (ArrayList<Point>)group.clone();
for (int i = 0; i < group.size(); i++) {
copy.group.set(i,group.get(i).clone());
}
return copy;
}
catch (CloneNotSupportedException e) {
throw new InternalError();
}
}
}
任务:
构造类Group。可以将某个Figure 对象添加到几个不同的组中。您必须确定同一个Figure 对象是否可以同时属于多个组。在本练习中,这不应该发生。所有Group 对象必须独占拥有它们的项目对象。不能在多个组之间共享对象。
因此,我们从添加方法开始:
public Figure class clone ();
// (define it in the same style as on page 4 in the document below)
// this was what point clone() was in the class Point.
在此之后有一些方法的实现说明和一个Group 克隆。
所以在这个任务中,我应该用各种方法实现Group 以及一个新的clone(),这就是我现在遇到的问题。
我希望你能帮助我指出正确的方向,只是想知道为什么会发生这种情况。谢谢!
【问题讨论】:
-
可以分享一下作业要求吗?
-
它是瑞典语,所以我会尝试翻译:
-
如果
Point真的应该是抽象的,那么就不要在Point中实现clone,而是让子类实现clone()。使用抽象类,您可以将继承的接口方法的实现推迟到具体的子类。 -
这可能是题外话,但是否可以覆盖在
Point中声明的clone()Group?
标签: java inheritance exception deep-copy