点击查看: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
}
相关推荐:
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |