![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Merhaba |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 23.4.2011 Репутация: нет Всего: нет |
Добрый Вечер!!!
Объясните Пожалуйста поподробнее, что обозначет: "переопределение метода" . Приведите Пожалуйста пример! Как связана аннатация @Override с этим понятием? |
|||
|
||||
Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
||||
|
||||
danilych |
|
||||||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 2.2.2011 Репутация: 3 Всего: 3 |
С переопределением метода все очень просто. Как известно, все классы в Java являются потомками класса Object, в котором присутствуют некоторые методы. Одним из таких является метод equals(). На его примере и можно объяснить, что такое "переопределение метода" и для чего используется директива @override. Этот метод используется для сравнения объектов одного класса между собой. В классе Object он реализован таким образом, что проверяет, указывают ли две ссылки на один и тот же объект в памяти. Но очень часто возникает необходимость сравнивать "содержимое" двух объектов между собой, например, пусть у нас есть класс Employee
и мы имеем два экземпляра этого класса - A и B.
Очевидно, что объекты A и B будут равны если содержат одинаковые значения в полях name и gender. Однако, если мы применим для сравнения их между собой метод equals с реализацией по умолчанию (т.е. из класса Object), то получим отрицательный результат, т.к. переменные A и B указывают на разные области памяти -
поэтому, чтобы все работало нужным нам образом нужно переопределить метод equals() и реализовать в нем сравнение не ссылок, а содержимое полей name и gender. В классе Object метод equals объявлен следующим образом:
т.е. метод принимает в качестве параметра ссылку на любой объект (т.к. все классы наследуются от Object). Однако переопределяя этот метод можно описать его так (тем самым совершив ошибку)
т.е. указать тип принимаемого параметра как Employee, но это уже будет не переопределение метода, а объявление нового (см. перегрузка методов). Вот тут и вступает в действие директива @override. Если помечать ей каждый переопределяемый метод, то компилятор будет отслеживать эти вопросы. Т.е. если мы сделаем так:
то получим сообщение об ошибке, т.к. метода equals, принимающего параметр типа Employee нет в родительском классе. Об этом можно почитать в книге Хорстмана Java2 Том 1. Основы 7 издание стр. 214 |
||||||||||||
|
|||||||||||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |