类对象的复制

类对象变量不同于一般的基本类型变量,它的内部具有属性变量成员和函数方法成员,往往需要自己实现复制方法。

protected Object clone() throws CloneNotSupportedException的功能:创建并返回当前类变量的一个副本,重写该函数方法的类需要实现接口Cloeable,否则会抛出CloneNotSupportedException的异常。即:类名implements Cloneable表示该对象能被克隆,能使用Object.clone()方法。

示例:

package org.test;

public class Exec {

	public static void main(String args[]){
	 BookCollection bc1 = new BookCollection(10);
	 bc1.getBooks()[0].setBookID(100);
	 bc1.getBooks()[0].setISBN("4765689708");
	 BookCollection bc2 = ( BookCollection) bc1.clone();
	 System.out.println(bc2.getBooks()[0].getBookID());
	 System.out.println(bc2.getBooks()[0].getISBN());
	}
}
package org.test;


public class BookCollection implements Cloneable{

	private Book[] books = null;
	private int number;
	
	public BookCollection(){
		
	}
	
    public BookCollection(int number){
		this.number = number;
		books = new Book[number];
		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;
    }
 }
package org.test;

public class Book {

	private int bookID;
	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 void setTitle(String title) {
		this.title = title;
	}

	public void setISBN(String ISBN) {
		this.ISBN = ISBN;
	}
	

	public void setBookID(int bookID) {
		this.bookID = bookID;
	}
	
	public int getBookID(){
		return bookID;
	}
	
	public String getISBN(){
		return ISBN;
	}
	
	public String getTitle(){
		return title;
	}
	
	public Object clone(){
		Object obj = null;
		try {
			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;
	}
}





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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值