2014-03-27 2 views
-2

Я знаю, что это работает:Создание внутренних анонимных классов, которые расширяют другие классы

class Main{ 
    public static void main(String[]args){ 
     AbstractClass object = new AbstractClass(){ ... }; 
    } 
} 

Он создает объект с неявным расширяет AbstractClass класс (который, очевидно, abstract).

Но будет ли следующая работа тоже?

class Main{ 
    public static void main(String[]args){ 
     ConcreteClass object = new ConcreteClass(){ ... }; 
    } 
} 

ConcreteClass есть класс, который не является abstract.

ответ

5

Большинство, конечно, это будет работать: класс, который вы расширяете в анонимный класс не должен быть абстрактным - это может быть любой не- final класс, или даже интерфейс (в этом случае вам нужно будет реализовать все его методы).

Кроме того, если класс не является абстрактным, вы можете подклассом без переопределения каких-либо его методов. Эта функция использовалась в так называемом шаблоне перечисления типа безопасно, который был распространен до введения классов enum в Java.

+0

Не стоит упоминать, что классы 'final' не могут быть расширены таким образом. –

+0

@ Duncan Спасибо за примечание! – dasblinkenlight

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