Программирование на JAVA
Меню :
Стартовая
Основы программирования
Программирование на JAVA
Программирование на C++
Программирование на Pascal
Задачи по программированию
• цепочка наследования, которой принадлежит исходный класс, может быть довольно длинной, и каждый родительский класс может иметь свои поля - недоступные, но важные для воссоздания состояния исходного объекта;
• в зависимости от логики реализации возможна ситуация, когда не все поля должны копироваться для корректного клонирования; одни могут оказаться лишними, другие потребуют дополнительных вычислений или преобразований;
• возможна ситуация, когда объект нельзя клонировать, дабы не нарушить целостность системы.
Поэтому было реализовано следующее решение.
Класс Object содержит метод clone(). Рассмотрим его объявление:
protected native Object clone() throws CloneNotSupportedException; Именно он используется для клонирования. Далее возможны два ва-пЮнта.
Первый вариант: разработчик может в своем классе переопределить эЦг метод и реализовать его по своему усмотрению, решая перечисленные ЩЮблемы так, как того требует логика разрабатываемой системы. Упомянутые условия, которые должны быть истинными для клонированного овЫжта, не являются обязательными и программист может им не следовать, если это требуется для его класса.
Второй вариант предполагает использование реализации метода clone() в самом классе Object. То, что он объявлен как native, говорит о ЮМ, что его реализация предоставляется виртуальной машиной. Естественно, перечисленные трудности легко могут быть преодолены самой WM, ведь она хранит в памяти все свойства объектов.
„.-; При выполнении метода clone() сначала проверяется, можно ли ^Тонировать исходный объект. Если разработчик хочет сделать объек-IW своего класса доступными для клонирования через Object.clone(), ^ он должен реализовать в своем классе интерфейс Cloneable. В этом интерфейсе нет ни одного элемента, он служит лишь признаком для вИртуальной машины, что объекты могут быть клонированы. Если ^Роверка не выполняется успешно, метод порождает ошибку C|°neNotSupportedException.
Если интерфейс Cloneable реализован, то порождается новый объ-е*тоттого же класса, от которого был создан исходный объект. При этом ^Пирование выполняется на уровне виртуальной машины, никакие кон-^УКторы не вызываются. Затем значения всех полей, объявленных, унаследованных либо объявленных в родительских классах, копируют^ Полученный объект возвращается в качестве клона.