Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Клонирование объектов 
V
    Опции темы
Sherst
Дата 27.3.2006, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 26.10.2005

Репутация: нет
Всего: 2



Прочитал следующее:
клонирование объектов применяется в тех случаях, когда в процессе работы метода надо внести изменение в объект, не изменяя при этом внешний объект (исключается возможноть использования дублирующих ссылок).Для создания копии локального объекта используется метод clone().Это protected метод базового класса Object.

Вопрос такой зачем переопределять данный метод в дочерних классах, ведь классы по умолчанию наследуют Object ?

PM MAIL   Вверх
COVD
Дата 27.3.2006, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



А потому что метод класса Object не всегда срабатывает, т.е. он может создать обьект, но установить его значения, равными исходному (а это собственно и есть клонирование, пустой-то обьект легко создать конструктором) не всегда в состоянии. Вот и приходится руками делать. В простых же случаях работает.

Это сообщение отредактировал(а) COVD - 27.3.2006, 22:34
PM MAIL   Вверх
LSD
Дата 27.3.2006, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Sherst @ 27.3.2006, 21:39 Найти цитируемый пост)
Вопрос такой зачем переопределять данный метод в дочерних классах, ведь классы по умолчанию наследуют Object ?

1. protected метод может быть вызван либо наследниками либо из того же пакета. Но не любым классом.
2. для удобства программирования, лучше убрать CloneNotSupportedException
3. для осуществления глубокого клонирования (если требуется)
Добавлено @ 22:40
Ну и конечно не забыть про implements Serializable.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Sherst
Дата 27.3.2006, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 26.10.2005

Репутация: нет
Всего: 2



Можете привести пример поверхностного и глубокого клонирования ?
Заранее спасибо.
PM MAIL   Вверх
LSD
Дата 27.3.2006, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Поверхностоное:
Код
public Object clone()
{
  try
  {
    return super.clone();
  }
  catch(CloneNotSupportedException e)
  {
    return null;//doesn't happens
  }
}

Глубокое:
Код
public Object clone()
{
  try
  {
    MyClass obj = (MyClass) super.clone();
    obj.feild1 = (SomeType1)obj.field1.clone();
    obj.feild2 = (SomeType2) obj.field2.clone();
    return obj;
  }
  catch(CloneNotSupportedException e)
  {
    return null;//doesn't happens
  }
}


Что к чему хорошо расписано у Эккеля.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Sherst
Дата 27.3.2006, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 26.10.2005

Репутация: нет
Всего: 2



Спасибо за пример.
to LSD обязательно добавляю плюсик, только немного выросту smile

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0448 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.