10、使对象数组sourceCircleArray和targetCircleArray之间的拷贝形成深拷贝。为了形成Circle类对象数组之间的深拷贝,首先应使Circle类实现Cloneable接口,并在Circle类中改写clone()方法。其次,在调用clone()方法创建新的对象数组之后,还要为新数组targetCircleArray中的每个元素调用clone()方法,创建每个圆对象的深拷贝对象。
时间: 2023-06-12 11:07:50 浏览: 87
示例代码如下:
```java
public class Circle implements Cloneable {
private int radius;
private Point center;
public Circle(int radius, Point center) {
this.radius = radius;
this.center = center;
}
public int getRadius() {
return radius;
}
public Point getCenter() {
return center;
}
// 改写 clone() 方法
@Override
protected Object clone() throws CloneNotSupportedException {
Circle clonedCircle = (Circle) super.clone();
clonedCircle.center = (Point) center.clone();
return clonedCircle;
}
}
public class Point implements Cloneable {
private int x;
private int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
// 改写 clone() 方法
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
public class Test {
public static void main(String[] args) {
Circle[] sourceCircleArray = new Circle[2];
sourceCircleArray[0] = new Circle(5, new Point(0, 0));
sourceCircleArray[1] = new Circle(10, new Point(1, 1));
Circle[] targetCircleArray = new Circle[2];
try {
// 先调用 clone() 方法创建新的对象数组
targetCircleArray = (Circle[]) sourceCircleArray.clone();
// 再为新数组中的每个元素调用 clone() 方法,创建每个圆对象的深拷贝对象
for (int i = 0; i < targetCircleArray.length; i++) {
targetCircleArray[i] = (Circle) sourceCircleArray[i].clone();
}
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
```
可以看到,首先在 Circle 类和 Point 类中分别实现了 Cloneable 接口,并且改写了 clone() 方法。在 Test 类中,先调用 sourceCircleArray 的 clone() 方法创建新的对象数组 targetCircleArray,然后再遍历 targetCircleArray,为其中的每个元素调用 clone() 方法,创建每个圆对象的深拷贝对象。这样就可以实现 sourceCircleArray 和 targetCircleArray 之间的深拷贝了。
阅读全文