Внутренний класс Java и статический вложенный класс - PullRequest
1 голос
/ 25 октября 2019

Есть много причин для выбора одного дизайна над другим, и здесь есть действительно хорошие ответы на него:

Мне любопытно, есть ли какая-либо разница в производительности или памяти / памяти при выборе статического внутреннего класса через обычный класс.

Как выглядит разница после компиляции?

Чтобы было понятно, этот вопрос не о том, чтобы дать совет, что использовать в каждом конкретном случае. Я просто хочу узнать, как работает Java здесь, за кулисами.

1 Ответ

0 голосов
/ 25 октября 2019

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

Нестатический вложенный класс имеет скрытую ссылку на экземпляр включающего класса, поэтому вы можете ссылаться на нестатические поля включающего класса изнутри внутреннего класса.

Когда вы определяете анонимный класс в методе, у вас также будет копия всех локальных переменных, объявленных в методе и на которые есть ссылки из анонимного класса. Если метод нестатический, у вас также будет скрытая ссылка на включающий класс.

...