现有2个简单的类,class A为基类,B为子类。A中有一个getClone(),现在的问题是B的getClone函数该如何写?public class A {
private int nums[];
public A(){
}
public A(int size){
nums= new int[size];
}
public int getSize(){
return nums.length;
}
public int getNum(int index){
return nums[index];
}
public void setNum(int index, int value){
nums[index] = value;
}
public A getClone(){
try{
A clone = this.getClass().newInstance();
clone.setSize(this.getSize());
for(int i = 0; i < this.getSize(); i++){
clone.setNum(i, nums[i]);
}
return clone;
}catch(InstantiationException ex){
return null;
}catch(IllegalAccessException ex){
return null;
}
}
private void setSize(int size){
nums = new int[size];
}
}
public class B extends A {
anotherClass temp; public B (){
}
public B (int size, anotherClass value){
super(size);
this.temp = value;
}
public B getClone() { 该如何写??? 现在我是这样写的:
B clone = new B(this.getSize(), this.temp);
for (int i = 0; i < clone.getSize(); i++){
clone.setNum(i, this.getNum(i));
}
return clone;
}
}这样写虽然好像没有问题,但我觉得并不好,挺别扭,基本就是复制A的代码。
请问有没有更好的写法,最好是先调一下super.getClone()之类的?
注:class A的代码不能修改。
private int nums[];
public A(){
}
public A(int size){
nums= new int[size];
}
public int getSize(){
return nums.length;
}
public int getNum(int index){
return nums[index];
}
public void setNum(int index, int value){
nums[index] = value;
}
public A getClone(){
try{
A clone = this.getClass().newInstance();
clone.setSize(this.getSize());
for(int i = 0; i < this.getSize(); i++){
clone.setNum(i, nums[i]);
}
return clone;
}catch(InstantiationException ex){
return null;
}catch(IllegalAccessException ex){
return null;
}
}
private void setSize(int size){
nums = new int[size];
}
}
public class B extends A {
anotherClass temp; public B (){
}
public B (int size, anotherClass value){
super(size);
this.temp = value;
}
public B getClone() { 该如何写??? 现在我是这样写的:
B clone = new B(this.getSize(), this.temp);
for (int i = 0; i < clone.getSize(); i++){
clone.setNum(i, this.getNum(i));
}
return clone;
}
}这样写虽然好像没有问题,但我觉得并不好,挺别扭,基本就是复制A的代码。
请问有没有更好的写法,最好是先调一下super.getClone()之类的?
注:class A的代码不能修改。
public class TestChange { public static void main(String[] args)
{
Son s = new Son(8);
s.print();
}
}class Father{
private int i;
public Father(int num){
this.i = num;
}
public void print(){
System.out.println(this.i);
}
}class Son extends Father{
private int j;
public Son(int num){
super(num);
}
}