> For the complete documentation index, see [llms.txt](https://opu.gitbook.io/oop/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://opu.gitbook.io/oop/2019-2020-archive/arkhiv-1/arkhiv/lekcii/draft-1/6.-anonimnye-klassy.md).

# 6. Анонимные классы

При создании объектов с помощью оператора `new` возвращается ссылка на вновь созданный объект. Однако нас никто не обязывает эту ссылку присваивать в качестве значения ссылочной переменной. В таких случаях создается **анонимный объект**. Другими словами, объект есть, а переменной, которая бы содержала ссылку на этот объект, нет.

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

В данном случае, нам нужен объект класса PrinterManager только для одного действия - для распечатки файла. То есть, мы создаем объект, вызываем метод, после чего объект нам больше нужен.

В первом случае используется обычный порядок работы с объектами - создаем объект класса PrinterManager, ссылка на объект записывается в ссылочную переменную manager.&#x20;

Во втором случае мы создаем анонимный объект. Инструкцию

можно условно разбить на две части. Выражение`new PrinterManager()` создает новый объект класса PrinterManager и возвращает ссылку на объект в качестве результата выражения. Поскольку ссылка не присваивается переменной, то такой объект является анонимным. Но так как выражение `new PrinterManager()` возвращает ссылку на объект, мы можем у этой ссылки вызвать метод `printFile()`.
