2009-10-09 3 views
32

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

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

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

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

Спасибо.

+3

Большой вопрос ... и это то, что очень сложно найти в ссылке! +1 К счастью, когда я попытался спросить то же самое Q на SO, он нашел ваш Q для меня. – LarsH

ответ

28

Это anonymous inner class.

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

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

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

12

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

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

+0

Спасибо. Я искал внутренний метод, но не считал его внутренним классом, а тем более анонимным внутренним классом. Отключить, чтобы прочитать о них, я иду! – 2009-10-09 07:54:24

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

  • Нет связанных вопросов^_^