在jdk 中,接口 cloneable 只是一个标记接口,该接口中没有任何的成员,详细说明该接口的作用,并举例说明。
时间: 2024-03-01 22:56:00 浏览: 67
接口 `Cloneable` 是 Java 中的一个标记接口,它没有任何方法定义,只是用来标识该类可以被克隆的。实现了 `Cloneable` 接口的类可以使用 Object 类的 clone 方法来创建该类的副本,即实现了对象的克隆。
在 Java 中,对象的克隆可以分为浅克隆和深克隆。浅克隆只会克隆基本数据类型和引用类型的地址,而不会克隆引用类型指向的对象;深克隆会克隆对象及其引用类型指向的对象。
下面是一个实现了 `Cloneable` 接口的类的例子:
```java
public class Person implements Cloneable {
private String name;
private Address address;
public Person(String name, Address address) {
this.name = name;
this.address = address;
}
public String getName() {
return name;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
@Override
public Person clone() throws CloneNotSupportedException {
return (Person) super.clone();
}
}
```
在上面的例子中,`Person` 类实现了 `Cloneable` 接口,并重写了 `clone` 方法。在 `clone` 方法中,调用了 `Object` 类的 `clone` 方法来创建 `Person` 类的副本。
如果我们进行浅克隆,即不重写 `clone` 方法,直接调用 `Object` 类的 `clone` 方法,那么克隆出来的对象中的 `address` 属性将是原对象中 `address` 属性的地址,即两个对象的 `address` 属性指向同一个对象。如果我们进行深克隆,需要在 `clone` 方法中将 `address` 属性也进行克隆处理,即创建一个新的 `Address` 对象,然后将其赋值给克隆出来的 `Person` 对象的 `address` 属性。
阅读全文