| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > clone() |
| Автор: Granje 28.7.2012, 23:02 | ||
Здравствуйте. Я новичок в Java. Подскажите почему в этом коде возникает ошибка "clone() has protected access in Object"
Как я понимаю EqualsTest наследник Object, значит он наследует метод clone(). Ведь даже в описании clone() в API есть такой пример "x.clone().equals(x) will be true". В теории должно работать, но не работает. |
| Автор: Stolzen 28.7.2012, 23:51 | ||
Должно быть
И, плюс к этому, нужен правильно переопределенный метод equals |
| Автор: Granje 29.7.2012, 09:17 | ||||
На самом деле я немного затупил. Класс должен называться CloneTest. То есть интересует почему возникает ошибка доступа к методу clone(). Ведь, как я понял, доступ protected это видимость или в том же пакете, или в подклассах. Допуститим полное имя моего класса com.my.test.CloneTest и он же является подклассом Object. И должно работать...
Это констуктор писать... Я что не могу клонировать обьект типа Object? И вообще это писалось чтобы руками попробовать метод clone(), и не должно было быть никаких сложностей. |
| Автор: dorogoyIV 29.7.2012, 10:30 |
| в исходник загляни... метод clone() пустой и к тому же protected он зарезервирован, и ты должен его сам переопределить... для некоторых объектов он определен - например календарь... |
| Автор: Granje 29.7.2012, 10:46 |
| ага, всему виной "ця бусурманська мова", вернее ее не знание). в доках выражение "x.clone().equals(x) will be true" это рекомендация к реализации. Я подумал что он уже реализован и в нем оно уже определено). Всем спасибо! Пойду дальше грызть гранит Java |
| Автор: priam220 30.7.2012, 15:13 |
он не пустой, он native. Его можно не переопределять, если устраивает зона видимости и поверхностное клонирование объекта. |
| Автор: dorogoyIV 30.7.2012, 16:03 |
| priam220, не у всех. для некоторых нужно вызывать тяжелое клонирование (или как там это называется - я уже не помню...). и как я уже говорил, для некоторых объектов этот метод уже определен - java.util.Calendar; |