點擊查看:2015計算機等級考試二級Java入門教程章節匯總
點擊查看:2015計算機等級考試二級Java入門教程第六章匯總
6.7 通用超類
正像你在這部分開始的概述中所看到的,從類。句object繼承過來的protected方法clone()將建立一個新的對象,該對象為當前對象的副本。只有在被復制的對象類指示復制是可被接收的時候,才進行復制操作。若類實現了Cloneable接口,就能夠接收復制。現在不要擔心接口是什么,稍后我們將介紹它。
從object繼承過來的clone()方法,通過建立一個與當前對象同類型的新對象,并且把新對象中每個字段的值設置成與當前對象對應的字段值相同的方式來復制對象。當原始對象的數據成員引用類對象時,被引用的對象在創建副本時不重復復制,只是把引用從舊對象的字段中拷貝到復制的對象中。現在,舊對象和新對象都可以通過它們對應的數據成員修改同一個共享的對象,而我們卻不能預料所發生的結果,這通常并不是你所希望的。
如果對象是可被復制的,那么這個類必須實現Cloneable接口。我們將在本章稍后討論有關接口的內容,那時你會看到通常實現的接口涉及到實現一套特定的方法。要讓一個類實施這個接口,你所需要做的全部工作是在類定義的第一行用implements關鍵字對它進行聲明,例如:
class Dog implements cloneable
(
//Detoile of the definition of the class
}
由于我們聲明了類的實現接口,所以Dog對象可復制。
若我們例舉一個簡單的特定實例,會更清楚地了解所繼承的clone()方法的含義。讓我們假設定義了一個類Flea,它有一個可用來更改名字的方法:
public class Flea extendsAnimal implements Cloneable
{
//Constructor
public Flea(string aName,string,aSpecies)
{
super("Flea") //Pass the type to the base
name=aName //Supplied name
species=aSpecies; //Supplied species
}
//Change the flea's name
public void setName(string aName)
(
name=aName; //Change to the new name
}
//Return the flea's name
public string getName()
(
return name
)
//Return the species
public strund getspecies()
{
return species
}
public void sound()
{
system.out.println(post)
}
//Pressent a fles's details as a string
public String tostring ()
{
return super.tostring( )+ \nIt's+name+the +species;
}
//Override inherited clone( ) to make it public
public object clone () throws CloneNotsupportedException
{
return super clonnnne();
}
private string name //Name of fleal
private string species; //Flea species
}
相關推薦:
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |