LINUX.ORG.RU

@Override


0

1

Что-то я запутался...

public class LinkCounter extends WebPage {
private int counter = 0;

public LinkCounter() {
add(new Link(«link») {
@Override
public void onClick() {
counter++;
}

});
add(new Label(«label»,
new PropertyModel(this, «counter»)));

}
}


дано такой вот класс, что говорит вот это вот @Override?
перегрузить метод который описан в интерфейсе?
подробно можно растолковать?

Перегрузить метод определённый в классе Link, он абстрактный, а не интерфейс, раз у него конструктор есть даже.

jreznot
()

> дано такой вот класс, что говорит вот это вот @Override?
Да вроде ничего не говорит. Но если случайно там на самом деле происходит не overriding, а overloading, то компилятор ругнется, оберегая вас от ошибки.


P.S. Отвечал неосилятор явы, лучше дождитесь спецов. )
P.P.S. Используйте лоркод для вставки кода в сообщение/пост.
P.P.P.S. Язык для приличия можно бы и указать в посте.

metar ★★★
()
Ответ на: комментарий от metar

> Но если случайно там на самом деле происходит не overriding, а overloading, то компилятор ругнется, оберегая вас от ошибки.

что значит «случайно»? там же четко написано - @Override.

isden ★★★★★
()
Ответ на: комментарий от isden

> что значит «случайно»? там же четко написано - @Override.
Будто без этой аннотации overriding не произойдет.

metar ★★★
()
Ответ на: комментарий от metar

ты знаешь, может и не произойти. лично сталкивался с таким при имплементации интерфейсов в GWT в анонимном классе.

isden ★★★★★
()
Ответ на: комментарий от isden

Как я понял, @Override предназначен в целях использования полиморфизма. Т.е. говоря @Override и используя сигнатуру в дочернем классе идентичную сигнатуре в классе родителя, мы автоматически запрещаем вызов по supper. т.е. создали объект из потомка, дёрнули метод, в результате чего отработает именно метод даного объекта а не метод родителей от которых наследовались... вроди так, если что поправьте.

linuxorgru
() автор топика

Override переводится как «переопределить», а не «перегрузить» (Overload)

anonymous
()

Я так понимаю @Override лишь для того, чтобы уменьшить количество ошибок в коде. Когда добавляем метод в класс, то может произойти что-то одно из двух: либо будет новый метод, либо переопределится старый, если в классе-предке уже такой был. Естественно можно ошибиться с сигнатурой и незаметно для себя получить новый метод вместо переопределения старого. Это неприятная ошибка, так как она очень долго может себя никак не проявлять. Чтобы избежать таких ошибок очень полезно явно указать, что ты хочешь именно переопределить метод.

Мне такой возможности не хватает в плюсах. :(

pathfinder ★★★★
()
Ответ на: комментарий от pathfinder

Кажется разобрался, но вот чтобы удостовериться вот вам вопрос на засыпку. В чём тогда разница между абстрактной фцией и той которую мы переопределяем? если как и для первой так и для второй мы делаем собственную реализацию.

linuxorgru
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.