- //测试类
- 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;
- }
- }