參考資料
[1]. 瘋狂Java講義(第三版) 李剛
Object類
Object類是所有類、數組、枚舉類的父類,也就是說,Java允許把任何類型的對象賦給Object類型的變量。當定義一個類時沒有使用extends關鍵字爲它顯示指定父類,則該類默認繼承Object父類。
自定義clone
Java還提供了一個protected修飾的clone()方法,該方法用於幫助其他對象來實現“自我克隆”,所謂“自我克隆”,就是得到一個當前對象的副本,而且兩者之間完全隔離。由於Object類提供了clone()方法使用了protected修飾,因此該方法只能被子類重寫或調用。
自定義類實現“克隆”的步驟如下:
1. 自定義類實現Cloneable接口,這是一個標記性接口,實現該接口的對象可以實現“自我克隆”,接口裏沒有定義任何方法。
2. 自定義類實現自己的clone()方法。
3. 實現clone()方法時通過super.clone();
,調用Object實現的clone()方法來得到該對象的副本,並返回該副本。
class Address
{
String detail;
public Address(String detail)
{
this.detail = detail;
}
}
// 實現Cloneable接口
class User implements Cloneable
{
int age;
Address address;
public User(int age)
{
this.age = age;
address = new Address("廣州天河");
}
// 通過調用super.clone()來實現clone()方法
public User clone()
throws CloneNotSupportedException
{
return (User)super.clone();
}
}
public class CloneTest
{
public static void main(String[] args)
throws CloneNotSupportedException
{
User u1 = new User(29);
// clone得到u1對象的副本。
User u2 = u1.clone();
// 判斷u1、u2是否相同
System.out.println(u1 == u2); //①
// 判斷u1、u2的address是否相同
// address來自一個引用地址,所以相等
System.out.println(u1.address == u2.address); //②
}
}