参考资料
[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); //②
}
}