所以我有以下课程:
class A{
public A(int n1){
n=n1;
}
int n;
}
class B extends A{
public B(int n2){
super(n2);
cnt=1;
}
int cnt;
}
class C extends B{
public C(int n3){
super(n3);
clr="red";
}
String clr;
}
public class Driver {
public static void main(String[] args){
A a,b,c,d,e;
a=new B(200); d=a.copy();
b=new C(100); e=b.copy();
}
}
我被要求在A,B,C类中定义方法copy()
。复制方法基本上复制了所有嵌套对象。
我有两个问题:
我没有看到任何嵌套对象被构造,他为什么要我复制所有嵌套对象?是因为当我构造一个子类对象时,会构造一个基类对象并嵌套在子类对象中吗?
如下编写方法是否正确(以B类为例):
class B extends A{
public B(int n2){
super(n2);
cnt=1;
}
int cnt;
public A copy(){
A copy_ref=new B(1);
((B)copy_ref).cnt=this.cnt;
copy_ref.n=super.n;
return copy_ref;
}
}
答案 0 :(得分:1)
我认为你对不同的概念感到困惑。
您将has-a relationship与is-a relationship混淆。
在你的代码中,C是B,也是A:C与B和A有一个is-a关系。
C不包含B或A的实例(这将是一个has-a关系)。
由于C是B和A,它包含B和A的所有成员。调用C的副本将复制其所有成员变量。您无需创建任何特定方法,只需使用already defined Object.clone method。
即可如果您想定义自己的克隆/复制方法,建议您查看the following article on the subject。
享受!