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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переопределение метода 
:(
    Опции темы
Merhaba
Дата 24.5.2011, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добрый Вечер!!!
Объясните Пожалуйста поподробнее, что обозначет: "переопределение метода" . Приведите Пожалуйста пример! Как связана аннатация @Override  с этим понятием? 
PM MAIL   Вверх
Samotnik
Дата 24.5.2011, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



PM MAIL   Вверх
danilych
Дата 24.5.2011, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



С переопределением метода все очень просто. Как известно, все классы в Java являются потомками класса Object, в котором присутствуют некоторые методы. Одним из таких является метод equals(). На его примере и можно объяснить, что такое "переопределение метода" и для чего используется директива @override. Этот метод используется для сравнения объектов одного класса между собой. В классе Object он реализован таким образом, что проверяет, указывают ли две ссылки на один и тот же объект в памяти. Но очень часто возникает необходимость сравнивать "содержимое" двух объектов между собой, например, пусть у нас есть класс Employee

Код

public class Employee{
  private String name;
  private String gender;
}


и мы имеем два экземпляра этого класса - A и B.
Код

Employee A = new Employee("Tom", "M");
Employee B = new Employee("Tom", "M");

Очевидно, что объекты A и B будут равны если содержат одинаковые значения в полях name и gender. Однако, если мы применим для сравнения их между собой метод equals с реализацией по умолчанию (т.е. из класса Object), то получим отрицательный результат, т.к. переменные A и B указывают на разные области памяти - 
Код

A.equals(B) даст false


поэтому, чтобы все работало нужным нам образом нужно переопределить метод equals() и реализовать в нем сравнение не ссылок, а содержимое полей name и gender.

В классе Object метод equals объявлен следующим образом:
Код

public boolean equals(Object otherObject){
...
}

т.е. метод принимает в качестве параметра ссылку на любой объект (т.к. все классы наследуются от Object). Однако переопределяя этот метод можно описать его так (тем самым совершив ошибку)
Код

public boolean equals(Employee otherObject){
...
}

т.е. указать тип принимаемого параметра как Employee, но это уже будет не переопределение метода, а объявление нового (см. перегрузка методов). Вот тут и вступает в действие директива @override. Если помечать ей каждый переопределяемый метод, то компилятор будет отслеживать эти вопросы. Т.е. если мы сделаем так:
Код

@override
public boolean equals(Employee otherObject){
...
}

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

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

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


 




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


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

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