Как это называется переопределением функций Java после нового - PullRequest
2 голосов
/ 03 апреля 2012

Я нахожу этот вид переопределения после нового в Java-коде очень часто

classB body
....
    ClassA a = new ClassA(){
@Override 
public void funcion(){
 atributeClassB = whatever 
   } 
 } ;
....

Как это называется конструкцией?когда выполняется код в скобках?как этот код может иметь доступ к атрибуту classB?

на самом деле, если я знаю только, как называется этот способ работы, я могу документировать myselve в Google, но без имени ключа я не могу его найти.

код, в котором я нашелименно это здесь в строке 151

Ответы [ 3 ]

1 голос
/ 03 апреля 2012

Он называется анонимным локальным производным классом (или «анонимным внутренним классом», хотя есть разница между просто «внутренним» и локальным [все локальные классы являются внутренними; не все внутренние классы локальны ; подробнее ниже]). Код в фигурных скобках является частью определения класса анонимного класса.

Это

ClassA a = new ClassA(){@Override public void funcion(){ atributeClassB = whatever } } ;

... фактически эквивалентно этому:

ClassA a = new SubClassA();

... где SubClassA определен внутри класса, содержащего:

class SubClassA extends ClassA {
    @Override public void funcion(){ atributeClassB = whatever }
}

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

1 голос
/ 03 апреля 2012
0 голосов
/ 03 апреля 2012

Два других ответа верны. Я просто хочу добавить, что аннотация @Override означает здесь то же самое, что и в обычном объявлении метода. Это говорит о том, что метод переопределяет метод, объявленный в суперклассе или (Java 6 и более поздние версии), реализующий метод, объявленный в интерфейсе или абстрактном суперклассе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...