代码改变世界

java中的clone方法

2011-06-03 10:25  Rollen Holt  阅读(926)  评论(0编辑  收藏  举报
//测试类  
public class Exec {  
    public static void main(String args[]) {  
        // 新建图书集合类变量,修改部分图书信息  
        BookCollection bc1 = new BookCollection(10);  
        bc1.getBooks()[0].setBookID(100);  
        bc1.getBooks()[1].setISBN("9601000980");  
  
        // 使用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 {  
    // 图书ID号  
    private int bookID;  
      
    // 图书的ISBN号  
    private String ISBN;  
      
    // 图书的标题  
    private String title;  
  
    // 默认构造函数  
    public Book() {  
    }  
  
    // 该构造函数只对图书ID进行初始化  
    public Book(int bookID) {  
        setBookID(bookID);  
    }  
  
    // 该构造函数对图书ID号,ISBN号和标题进行初始化  
    public Book(int bookID, String ISBN, String title) {  
        setBookID(bookID);  
        setISBN(ISBN);  
        setTitle(title);  
    }  
  
    // 图书ID的读取函数  
    public int getBookID() {  
        return bookID;  
    }  
  
    // 图书ID的设置函数  
    public void setBookID(int bookID) {  
        this.bookID = bookID;  
    }  
  
    // ISDN号的读取函数  
    public String getISBN() {  
        return ISBN;  
    }  
  
    // ISDN号的设置函数  
    public void setISBN(String ISBN) {  
        this.ISBN = ISBN;  
    }  
  
    // 图书标题的读取函数  
    public String getTitle() {  
        return title;  
    }  
  
    // 图书标题的设置函数  
    public void setTitle(String title) {  
        this.title = title;  
    }  
  
    // 支持类变量复制的重要方法  
    public Object clone() {  
        Object obj = null;  
        try {  
            // 直接调用Object类提供的clone方法复制当前类变量  
            // 如果当前类变量有其他类变量的引用属性,则不应该使用此方法,而应写为  
            // obj = new Book();  
            // ((Book)obj).setBookID(bookID);  
            // ((Book)obj).setISBN(ISBN);  
            // ((Book)obj).setTitle(title);  
            obj = super.clone();  
        } catch (Exception e) {  
            System.out.println(e.getMessage());  
        }  
        return obj;  
    }  
}