Java之如何实现对象的克隆

在Object类中存在一个clone方法用于对象的克隆

protected native Object clone() throws CloneNotSupportedException;

此方法是实现克隆的唯一方法,所有类的对象只有调用此方法才可以进行克隆,但是此方法本身使用了protected权限,这样当不同的包产生对象是将无法调用object类中的clone方法,因此就需要子类来覆写clone方法,才可以克隆

在clone方法上抛出CloneNotSupportedException(不支持的克隆异常)。这是因为不是所有类的对象都可以被客厅,要克隆的类必须实现cloneable接口。

public interface Cloneable {
}

这个接口中没有任何方法,所以这个接口属于标识接口,用于表示一种能力

package com.oceanstar.test3;

class Book implements Cloneable{
    private String title;
    private double price;

    public Book(String title, double price) {
        this.title = title;
        this.price = price;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    @Override
    public String toString() {
        return "Bool{" +
                "title='" + title + '\'' +
                ", price=" + price +
                '}';
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
public class CloneableDemo {
    public static void main(String[] args) throws Exception {
        Book a = new Book("JAVA", 20);
        Book b = (Book) a.clone();
        System.out.println(b.toString());
        b.setTitle("Rust");
        System.out.println(a.toString());   // Bool{title='JAVA', price=20.0}    没有改变A,因为B开辟了一块新空间
        System.out.println(b.toString());
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值