Вместо того, чтобы пытаться реализовать Cloneable
, что считается нарушенным , я бы рекомендовал вам использовать конструкторы копирования . Конструктор копирования принимает экземпляр своего объявленного типа в качестве аргумента и копирует поля этого экземпляра в новый объект. Например:
public Student(Student copyFrom) {
this.name = copyFrom.name;
this.dept = copyFrom.dept;
}
...
Student copy = new Student(originalStudent);
Если Department
также предоставляет конструктор копирования, это позволит вам сделать глубокую копию Student
. Например:
public Student(Student copyFrom) {
this.name = copyFrom.name;
this.dept = new Department(copyFrom.dept);
}
Хотя из вашего вопроса неясно, зачем нужна глубокая копия.
Для дальнейшего чтения, эта статья затрагивает как проблемы Cloneable
, так и ограничения конструкторов копирования.