Я внимательно читаю «Эффективную Java» (Джошуа Блох) и нашел следующее предложение о клонировании:
Если вы разрабатываете класс для наследования, имейте в виду, что если вы решите не предоставлять защищенный метод клонирования с хорошим поведением, подклассы не смогут реализовать Cloneable.
Я немного запутался, потому что в моем маленьком тесте:
public class Cloning {
public static void main(String[] args) throws CloneNotSupportedException {
Woman woman1 = new Woman("Marie Curie-Sklodowska", 33, "Physics");
Woman woman2 = (Woman) woman1.clone();
}
static abstract class Person {
protected String name;
protected int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
static class Woman extends Person implements Cloneable {
private String field;
Woman(String name, int age, String field) {
super(name, age);
this.field = field;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
}
Я не получаю никакой ошибки. Думаю, я не правильно понял фразу. Кто-нибудь может объяснить, что имел в виду автор?
Person.clone()
и сделайте так, чтобы он явно выдавалCloneNotSupportedException
. Тогда это не сработает. - person Andy Turner   schedule 14.11.2017clone
. - person shmosel   schedule 14.11.2017clone()
отлично работает с приватными полями в суперклассе. - person shmosel   schedule 14.11.2017Object.clone()
. Я не знаю, о чем здесь говорит Блох, если только это не глубокое копирование. - person user207421   schedule 14.11.2017