java中飞clone方法

 

Code:
  1. //测试类  
  2. public class Exec {  
  3.     public static void main(String args[]) {  
  4.         // 新建图书集合类变量,修改部分图书信息  
  5.         BookCollection bc1 = new BookCollection(10);  
  6.         bc1.getBooks()[0].setBookID(100);  
  7.         bc1.getBooks()[1].setISBN("9601000980");  
  8.   
  9.         // 使用clone方法实现类变量复制  
  10.         BookCollection bc2 = (BookCollection) bc1.clone();  
  11.         System.out.println(bc2.getBooks()[0].getBookID());  
  12.         System.out.println(bc2.getBooks()[1].getISBN());  
  13.     }  
  14. }  
  15.   
  16. // 支持类变量复制的图书集合类  
  17. class BookCollection implements Cloneable {  
  18.     // 存储所有图书类变量的数组  
  19.     private Book[] books = null;  
  20.     // 图书总数  
  21.     private int number;  
  22.   
  23.     // 默认构造函数  
  24.     public BookCollection() {  
  25.     }  
  26.   
  27.     // 该构造函数按照指定数量初始化图书类变量数组  
  28.     public BookCollection(int number) {  
  29.         this.number = number;  
  30.         books = new Book[number];  
  31.           
  32.         // 每个图书类变量的ID都是一个从1开始连续分配的整数  
  33.         for (int i = 0; i < books.length; i++) {  
  34.             books[i] = new Book(i + 1);  
  35.         }  
  36.     }  
  37.   
  38.     // 支持类变量复制的重要方法  
  39.     public Object clone() {  
  40.         // 新建图书集合类变量  
  41.         BookCollection result = new BookCollection();  
  42.       
  43.         // 将新建类变量的所有图书信息设置与当前图书信息相同  
  44.         result.books = new Book[number];  
  45.         for (int i = 0; i < number; i++) {  
  46.             result.books[i] = (Book) books[i].clone();  
  47.         }  
  48.         return result;  
  49.     }  
  50.   
  51.     // 图书数组的读取函数  
  52.     public Book[] getBooks() {  
  53.         return books;  
  54.     }  
  55.   
  56. }  
  57.   
  58. // 图书类  
  59. class Book implements Cloneable {  
  60.     // 图书ID号  
  61.     private int bookID;  
  62.       
  63.     // 图书的ISBN号  
  64.     private String ISBN;  
  65.       
  66.     // 图书的标题  
  67.     private String title;  
  68.   
  69.     // 默认构造函数  
  70.     public Book() {  
  71.     }  
  72.   
  73.     // 该构造函数只对图书ID进行初始化  
  74.     public Book(int bookID) {  
  75.         setBookID(bookID);  
  76.     }  
  77.   
  78.     // 该构造函数对图书ID号,ISBN号和标题进行初始化  
  79.     public Book(int bookID, String ISBN, String title) {  
  80.         setBookID(bookID);  
  81.         setISBN(ISBN);  
  82.         setTitle(title);  
  83.     }  
  84.   
  85.     // 图书ID的读取函数  
  86.     public int getBookID() {  
  87.         return bookID;  
  88.     }  
  89.   
  90.     // 图书ID的设置函数  
  91.     public void setBookID(int bookID) {  
  92.         this.bookID = bookID;  
  93.     }  
  94.   
  95.     // ISDN号的读取函数  
  96.     public String getISBN() {  
  97.         return ISBN;  
  98.     }  
  99.   
  100.     // ISDN号的设置函数  
  101.     public void setISBN(String ISBN) {  
  102.         this.ISBN = ISBN;  
  103.     }  
  104.   
  105.     // 图书标题的读取函数  
  106.     public String getTitle() {  
  107.         return title;  
  108.     }  
  109.   
  110.     // 图书标题的设置函数  
  111.     public void setTitle(String title) {  
  112.         this.title = title;  
  113.     }  
  114.   
  115.     // 支持类变量复制的重要方法  
  116.     public Object clone() {  
  117.         Object obj = null;  
  118.         try {  
  119.             // 直接调用Object类提供的clone方法复制当前类变量  
  120.             // 如果当前类变量有其他类变量的引用属性,则不应该使用此方法,而应写为  
  121.             // obj = new Book();  
  122.             // ((Book)obj).setBookID(bookID);  
  123.             // ((Book)obj).setISBN(ISBN);  
  124.             // ((Book)obj).setTitle(title);  
  125.             obj = super.clone();  
  126.         } catch (Exception e) {  
  127.             System.out.println(e.getMessage());  
  128.         }  
  129.         return obj;  
  130.     }  
  131. }  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值