Вот ключевые различия и сходства между внутренним классом Java и статическим вложенным классом.
Надеюсь, что это поможет!
Outerclass.InnerClass innerObject = outerObject.new Innerclass();
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
Согласно документации Oracle есть несколько причин ( полная документация ):
- Это способ логически группы классов, которые используются только в одном месте: если класс полезен только для одного другого класса, то логично вставлять его в этот класс и поддерживать вместе. Вложение таких «вспомогательных классов» делает их пакет более упорядоченным.
- Он увеличивает инкапсуляцию: рассмотрим два класса верхнего уровня: A и B, где B нужен доступ к членам A, которые иначе были бы объявлены частными. Скрывая класс B в классе A, члены A могут быть объявлены частными, а B может получить к ним доступ. Кроме того, сам B может быть скрыт от внешнего мира.
- Это может привести к более легко читаемому и поддерживаемому коду: Вложение небольших классов в классы верхнего уровня помещает код ближе к тому, где он используется.