public class Book implements Cloneable{
private String title;
private int price;
private Book(String title, int price) {
super();
this.title = title;
this.price = price;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
@Override
public String toString() {
return "Book [title=" + title + ", price=" + price + "]";
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
public static void main(String[] args) {
Book book = new Book("java", 100);//实例化对象
try {
Book b = (Book) book.clone();//重新开辟了一块新的堆内存空间
b.setPrice(120);//修改克隆对象的属性,不影响其他对象
System.out.println("克隆前" + book);
System.out.println("克隆后"+b);
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
//Object类中存在一个clone()的方法,此方法使用的修饰符是protected,只有在同包情况下,才能访问Object.clone()中的方法,显然这明显是不可能的,所以需要子类来复写Object中的clone的方法,其中它提供了一个标示性接口Cloneable接口,必须实现这个接口方可。