2013-11-20 4 views
0

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

Что понятие я не хватает в OOP

ответ

2

есть два вопроса: во-первых, 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); 
     } 
    } 
} 

(Вы могли бы устранить/поймать блок попробовать и объявить метод 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); 
     } 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^