2015-08-07 2 views
5

я наткнулся ниже странного синтаксиса, я никогда не видел такого фрагмента кода, это не необходимость, но любопытно понятьJava странный синтаксис - (Anonymous подклассу)

new Object() { 
    void hi(String in) { 
     System.out.println(in); 
    } 
}.hi("strange"); 

Приведенный выше код дает результат, как strange

благодарит

ответ

9

вы создали anonymous sub-class из Object, который вводит метод, называемый hi, после чего вызвать этот метод с параметром "strange".

Давайте предположим, что у вас:

class NamedClass extends Object { 
    void hi(String in) { System.out.println(in); } 
} 

NamedClass instance = new NamedClass(); 
instance.hi("strange"); 

Если этот класс был нужен точно одном месте, нет никакой реальной необходимости быть назван и так далее - делая это анонимный класс, вы избавитесь от своего имени , класс определяется и инстанцируется, а метод hi вызывается немедленно в пределах одного выражения.

0

Это совершенно нормально и называется анонимным классом, он используется очень часто, если, если вы хотите передать ссылку на объект функции, вы будете делать это с анонимными классами или для использования обратных вызовов, теперь .hi на end действителен, потому что вы просто использовали новый оператор для создания объекта типа Object, и у вас есть ссылка на него, поэтому он работает.

0

Вы создали анонимный подкласс класса Object и затем вызывают метод. Четыре типа анонимного внутреннего класса существует: -

1)Inner class, 
2)Static nested classes 
3)Method local inner classes 
4)Anonymous inner classes 

В Annonymous внутренних классов, вы можете определить, экземпляры и использовать этот внутренний объект, то и там

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