在类层次结构中调用克隆方法

时间:2014-05-04 19:49:46

标签: java class clone hierarchy

所以,我有三个类(Person,Employee和Manager)。员工扩展了Person,Manager扩展了Employee ......

我正在尝试为每个类创建一个克隆方法。人很容易,因为我可以创建一个具有所有相同数据成员的新Person。

    public Object clone(){
    Person temp = new Person(new String(name), new String(address), new  String(phoneNumber));
    return temp;
}

员工是可能的,因为我可以使用super的get方法创建一个新的Employee来初始化那些数据成员以及Employee中的新成员。

    public Object clone(){
    Employee temp = new Employee(new String(super.getName()), new String(super.getAddress()),
            new String(super.getPhoneNumber()), salary);
    temp.hireDate = new Date(hireDate.getTime()); //Argument for new Date in milliseconds
    return temp;
}

但是,对于Manager,我无法从Person ...

获取数据成员
    public Object clone(){
    Object temp = (Manager)super.clone();
    ((Manager)temp).annualBonus = annualBonus;
    return temp;
}

我想要做的是在每个类的clone方法中调用每个super.clone()方法,但它不允许我向下转换,例如调用Person的克隆,并将结果向下转换为Employee。 ..

2 个答案:

答案 0 :(得分:0)

您可以使用Java深度克隆库。我过去使用它并且运行良好。它的深层克隆对象的java库。您甚至不能使用Cloneable接口。

Cloner cloner = new Cloner();
YourClass clone = cloner.deepClone(someObjectOfTypeYourClass);

代码可在http://code.google.com/p/cloning/

找到

答案 1 :(得分:0)

感谢您的建议,但我明白了......

由于我不能贬低Person,我需要通过调用Person中的get方法来构建一个Employee ..

Object temp = new Employee(super.getName(), super.getAddress(), super.getPhoneNumber(), salary);