Я читал этот ответ, и он упомянул ссылка, где автор объясняет, почему мы не должны использовать Cloneable. Но, до сих пор сомневаюсь, что там было заявлено
Если бы у меня был массив Cloneable, вы бы подумали, что я могу запустить этот массив и клонировать каждый элемент, чтобы сделать глубокую копию массива, но я не могу. Вы не можете привести что-то к Cloneable и вызвать метод клонирования, потому что у Cloneable нет общедоступного метода клонирования, как и у Object. Если вы попытаетесь выполнить приведение к Cloneable и вызвать метод клонирования, компилятор скажет, что вы пытаетесь вызвать защищенный метод клонирования для объекта.
Но вот я сделал
Init s = Init.getInstance(); // getting instance
int count=0;
Cloneable[] v = new Cloneable[5]; // creating array
Init x = s;
Init y = new Init(s);
try {
while (count < 5) {
v[count++] = (Cloneable) s.clone(); // casting it.
}
s.setClassName("Example");
System.out.println(((Init) v[2]).getClassName()); // Displaying.
} catch (CloneNotSupportedException ex) {
ex.printStackTrace();
}
Мне удалось создать массив Cloneable, и я сделал то, что, по словам автора, вызовет ошибку. Или я неправильно понял заявление автора? Кто-нибудь, пожалуйста, помогите мне понять причину выбора Copy Constructor вместо Cloneable.