Как этот метод переопределения вызывается в Java? - PullRequest
35 голосов
/ 09 октября 2009

Я относительно новичок в Java и использую новый API. Я столкнулся с этим методом переопределения, и я не уверен, как это называется:

public void exampleMethod() {
    Button loginButton = new Button("login"){
       public void onSubmit(){
          //submit code here
       }
    };
}

Насколько я понимаю, это переопределение метода onSubmit класса Button. Я никогда не сталкивался с этим типом переопределения раньше. Есть ли конкретное имя для этого? Я хочу прочитать об этом больше, но не могу найти. Все мои поиски до сих пор приводят к переопределению обычного метода путем создания нового класса, с которым я уже знаком.

Буду признателен, если кто-нибудь укажет мне правильное направление.

Спасибо.

Ответы [ 3 ]

32 голосов
/ 09 октября 2009

Это анонимный внутренний класс .

В приведенном выше примере вместо создания private class, расширяющего Button, мы создаем подкласс Button и предоставляем реализацию переопределенного метода в соответствии с остальным кодом.

Поскольку этот новый класс создается на лету, он не имеет имени, поэтому анонимный . Как определено в другом классе, это анонимный внутренний класс.

Это может быть очень удобный ярлык, особенно для Listener классов, но он может усложнить выполнение кода, если вы увлеклись, а определения метода в строке слишком длинные.

12 голосов
/ 09 октября 2009

Это анонимный внутренний класс . По сути, он создает новый класс, который наследуется от указанного (в данном случае Button, хотя вы можете использовать ту же технику для реализации интерфейсов) и переопределяет соответствующие методы. Он может содержать и другие методы, но они будут доступны только в этом классе.

Класс имеет доступ к конечным локальным переменным в том же методе, и если вы пишете метод экземпляра, он также имеет неявную ссылку на this (так что вы можете вызывать другие методы в своем "главном" классе) .

7 голосов
/ 09 октября 2009

Это анонимный внутренний класс.

Подробнее: Анонимные занятия

...