用Java程序演示一下Cloneable 接口的使用和clone()方法的使用
时间: 2023-07-16 08:12:24 浏览: 78
好的,以下是一个使用Cloneable接口和clone()方法的示例程序:
```java
public class Person implements Cloneable {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return this.age;
}
@Override
public Person clone() throws CloneNotSupportedException {
return (Person) super.clone();
}
}
public class Main {
public static void main(String[] args) {
Person p1 = new Person("Tom", 20);
try {
Person p2 = p1.clone();
System.out.println("p1 name: " + p1.getName());
System.out.println("p1 age: " + p1.getAge());
System.out.println("p2 name: " + p2.getName());
System.out.println("p2 age: " + p2.getAge());
p2.setName("Jerry");
p2.setAge(25);
System.out.println("p1 name: " + p1.getName());
System.out.println("p1 age: " + p1.getAge());
System.out.println("p2 name: " + p2.getName());
System.out.println("p2 age: " + p2.getAge());
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
```
输出结果为:
```
p1 name: Tom
p1 age: 20
p2 name: Tom
p2 age: 20
p1 name: Tom
p1 age: 20
p2 name: Jerry
p2 age: 25
```
从输出结果可以看出,p1和p2都指向了不同的对象,但是它们的属性值是一样的。当修改p2的属性时,p1的属性值并没有改变。这是因为Java中的clone()方法会创建一个新的对象,但是不会调用构造方法。因此,我们需要实现Cloneable接口并且重写clone()方法来确保正确的克隆行为。