Как метод записи может действовать аналогично методу клонирования объекта?

Я заметил, что клон - это метод класса Object, а Object - суперкласс каждого класса. В каждом классе я получаю клон как метод переопределения, предположим, я создаю класс с именем A, если я не переопределяю метод clone в class A и создал объект для A. Я не получаю доступ к методу клонирования в объекте

Какую концепцию мне не хватает в oop


person Sandeep P    schedule 20.11.2013    source источник


Ответы (1)


Есть две проблемы: во-первых, clone() является protected методом Object, поэтому его можно вызывать только из подкласса, если только вы не переопределите его и не сделаете общедоступным. Во-вторых, если ваш класс не реализует Cloneable, вызов clone() вызовет CloneNotSupportedException. Типичный подход:

class A implements Cloneable {
    public Object clone() {
         try {
             return super.clone();
         } catch (CloneNotSupportedException e) {
             throw new RuntimeException("Impossible exception!", e);
         }
    }
}

(Вы можете удалить блок try/catch и объявить свой метод clone() для выбрасывания CloneNotSupportedException. Этот метод будет проще, но весь вызывающий код должен будет обрабатывать исключение.)

Поскольку Java позволяет вам сузить тип возвращаемого значения при переопределении метода, вы можете переопределить clone(), чтобы он возвращал A, избавляя вызывающий код от необходимости приведения:

class A implements Cloneable {
    public A clone() {
         try {
             return (A) super.clone();
         } catch (CloneNotSupportedException e) {
             throw new RuntimeException("Impossible exception!", e);
         }
    }
}
person Ted Hopp    schedule 20.11.2013