Внутренние классы подходят при попытке эмулировать множественное наследование.Это похоже на то, что происходит под капотом в C ++: когда у вас есть множественное наследование в C ++, расположение объектов в памяти фактически является объединением нескольких экземпляров объекта;Затем компилятор выясняет, как указатель this должен быть настроен при вызове метода.В Java нет множественного наследования, но внутренний класс можно использовать для предоставления «представления» данного экземпляра под другим типом.
В большинстве случаев можно придерживаться одного наследования,но иногда множественное наследование будет правильным инструментом, и сейчас самое время использовать внутренний класс.
Это означает, что внутренние классы несколько сложнее, чем обычные классы, точно так же, как множественное наследованиеболее сложное, чем единичное наследование: многим программистам трудно решить эту концепцию.Отсюда и «лучшая практика»: избегайте внутренних занятий, потому что это сбивает с толку ваших коллег.На мой взгляд, это не очень хороший аргумент, и на моем рабочем месте мы очень рады использовать внутренние классы, когда посчитаем это целесообразным.
(Небольшой недостаток внутренних классов заключается в том, что они добавляют один дополнительный уровеньОтступы в исходном коде. Иногда это немного утомительно, когда хочется сохранить код в 79 столбцах.)