2012-03-31 3 views
0
  1. Какое использование может кому-то переопределить этот метод (getClass())? Какую цель он мог бы решить практически.Где хранится информация, отражающая объект?

  2. В документации по java сказано следующее: By convention, the returned object should be obtained by calling super.clone. If a class and all of its superclasses (except Object) obey this convention, it will be the case that x.clone().getClass() == x.getClass(). Зачем это так? Что делает эта истина? Где хранится информация, которая знает, какой тип объекта он имеет? Как это работает?

Извините, этот вопрос я удалил и не должен был. Я хотел изменить его. Больше не повторится.

EDIT: Я неправильно понял документацию, она является окончательным Х- (, но я все еще хотел бы задать второй вопрос

ответ

1

Где хранится информация об объекте отражающей?

В классе.

Какое использование может кому-то переопределить этот метод (getClass())? То, что цель могла решить практически.

Нет цели вообще, потому что getClass() является окончательным, поэтому он не может быть отменено, так что ваш вопрос не является ни о чем, что может реально произойти.

Для чего это должно быть правдой?

Потому что Object.getClass() возвращает класс Object его называют дальше, и потому, что Object.clone() возвращает объект того же класса, что он был вызван на, и потому цепочка super.clone() звонков закончится в Object.clone().

+0

Я все еще немного смущен. Почему бы ему не вернуть тот же класс, если цепочка не была задействована? – rubixibuc

+0

@rubixibuc Рассмотрите, что произойдет, если была реализована реализация 'clone()' где-то в цепочке, которая вернула 'new Object()'. Он будет удовлетворять семантике 'clone()', но сломать все остальное в поле зрения. – EJP

+0

, так что это не связано с информацией, хранящейся в объектной части иерархии? Похоже, что ур говорит, что даже вы удовлетворяете семантику, которую она еще может не гарантировать? – rubixibuc

2

Метод getClass является public final Это не может быть отменено

Использование clone.. это, безусловно, не является хорошей практикой.

Я думаю, что документация Java говорит это не изменить реализацию клона. Если переопределить клон, использовать super.clone держать ту же реализацию.

Если вы не меняете реализацию, в чем смысл переопределения? Вы можете добавить регистрацию. Вы можете ослабить его от protected до public. и т. Д.

Если вы не измените реализацию, тогда она будет иметь стандартную реализацию, которая, очевидно, гарантирует это свойство. С другой стороны, если вы измените реализацию, все ставки будут отключены.

+0

Очень злобно об этом, я не понимал, но мне все еще хотелось бы узнать вторую часть. – rubixibuc

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