@qwead

Зачем нужен интерфейс ICloneable, если есть конструктор копирования?

Что мешает клиенту напрямую при создании копии объекта вызывать конструктор копирования?
Circle copyOfCircle = new Circle(oldCircle);
чем этот код хуже вот этого?:
Circle copyOfCircle = (Circle) oldCircle.Clone();

public class Circle implements ICloneable {
    public int radius;

    public Circle() {
    }

    public Circle(Circle target) {
         /* super(target); */
        if (target != null) {
            this.radius = target.radius;
        }
    }

    @Override
    public Object clone() {
        return new Circle(this);
    }
}
  • Вопрос задан
  • 1117 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
Интерфейс ICloneable - это маркерный интерфейс, говорящий другим элементам программы о том, что объекты класса, реализующего этот интерфейс, можно клонировать.

Вызывающий код может не знать, есть ли в этом классе конструктор копирования, а в наличии метода Clone() для экземпляра IClonable можно не сомневаться.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы