Анонимный класс (Anonymous class)

Ребята, я не копи-пастил это откуда-то. Прослушал уроки и сделал вывод, но в целом не уверен. Поэтому буду очень благодарен если вы подтвердите правильно ли я все понял? или верно ли эти утверждения?

  1. Анонимный класс – это объявление класса и одновременно, создание объекта класса в одном выражении (;).

  2. Анонимный класс описывается через лямбда выражение.

  3. В анонимных классах невозможно описать конструктор, так как для описание конструктора необходимо его имя, а имения на этапе компиляции у анонимных классов нет, оно появится только на этапе выполнения.

  4. У анонимного класса может быть только один объект, так как объявление и описание класса(определение) происходит одновременно.

  5. Анонимный класс всегда либо наследуется от класса, либо имплеминтируется от интерфейса.

  6. Анонимный класс имеет доступ к private полям внешнего класса.

  7. В каких случаях используется анонимный класс?
    7.1 когда мы знаем, что используем объект этого класса, только один раз,
    7.2 когда нам нужно, переопределить метод какого-то класса и использовать его там же, где пишем код.
    7.3 когда нам нужно, создать класс имплементирующий от какого-то интерфейса и на ходу, там же где мы пишем код, использовать этот объект.

  8. Анонимный класс всегда является вложенным классом, так как даже если определить его внутри статического метода main, то этот статический метод будет принадлежать какому-то классу.

  9. Анонимный класс всегда создаётся на структуре полиморфизма.


Ответы (1 шт):

Автор решения: talex
  1. Да.
  2. Нет. Можно создать так: new Object() {}
  3. Нет. Существуют неименованные конструкторы
void foo() {
   new Object() {
      {
         System.out.println("I'm constructor"); 
      }
   };
}
  1. Да, но нет. Через new можно один раз. А через рефлекшен можно болше.
var o = new Object() {};
o.getClass().newInstance();
  1. Да.
  2. Да.
→ Ссылка