类对象复制

首先定义了个支持变量复制的图书类Book,类的所有属性为基本类型,它的clone方法重写方法只是简单的调用Object类继承clone方法,来实现对当前类变量的复制。然后定义了一个支持类变量复制操作集合类BookCollection,该类具有对象数组类型的属性成员,所以它的clone重写方法比较复杂,需要新建全部的内部属性成员,创建一个新的复制实际,并使用当前类变量相应字段的内容初始化新对象的所有字段,实现所谓的深层复制,而不是浅表复制。


public class ClassDefinitionMethod {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        // 新建图书集合类变量,修改部分图书信息
        BookCollection bc1 = new BookCollection(10);
        bc1.getBooks()[0].setBookID(33);
        bc1.getBooks()[1].setISBN("96010009876");
        for (int i = 0; i < 10; i++) {
            System.out.println(bc1.getBooks()[i].getBookID());
            System.out.println(bc1.getBooks()[i].getISBN());
        }
        // 使用clone方法实现类变量赋值
        BookCollection bc2 = (BookCollection) bc1.clone();
        System.out.println(bc2.getBooks()[0].getBookID());
        System.out.println(bc2.getBooks()[1].getISBN());
    }
}
class BookCollection implements Cloneable {
    // 存储所有图书类变量的数组
    private Book[] books = null;
    // 图书总数
    private int number;
    public BookCollection() {
    }
    public BookCollection(int number) {
        this.number = number;
        books = new Book[number];
        // 每个图书类变量的ID都是一个从1开始连续分配的整数
        for (int i = 0; i < books.length; i++) {
            books[i] = new Book(i + 1);
        }
    }
    // 支持类变量复制的方法
    public Object clone() {
        // 新建图书集合类变量
        BookCollection result = new BookCollection();
        // 将新建类变量的所有图书信息与当前图书信息相同
        result.books = new Book[number];
        for (int i = 0; i < number; i++) {
            result.books[i] = (Book) books[i].clone();
        }
        return result;
    }
    // 图书数组的读取函数
    public Book[] getBooks() {
        return books;
    }
}
class Book implements Cloneable {
    private int bookID;
    public int getBookID() {
        return bookID;
    }
    public void setBookID(int bookID) {
        this.bookID = bookID;
    }
    public String getISBN() {
        return ISBN;
    }
    public void setISBN(String iSBN) {
        ISBN = iSBN;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    private String ISBN;
    private String title;
    public Book() {
    }
    public Book(int bookID) {
        setBookID(bookID);
    }
    public Book(int bookID, String ISBN, String title) {
        setBookID(bookID);
        setISBN(ISBN);
        setTitle(title);
    }
    // 支持类变量复制的重要方法
    public Object clone() {
        Object obj = null;
        try {
            obj = super.clone();
        } catch (CloneNotSupportedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return obj;

     }

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值