Как упоминалось в некоторых других публикациях, система видимости Java основана на классах, а не на объектах.
Обратите внимание, что это используется в компиляторе: когда у вас есть вложенные классы, и вы получаете доступ к частномуполе внешнего класса, открытый синтетический статический метод генерируется, чтобы разрешить доступ.Обычно он называется «access $ 0» и т. Д. С помощью этих синтетических методов можно создать байт-код, который нарушает инкапсуляцию без Reflection API.Вы также можете получить к ним доступ из API Reflection, не предоставляя доступ частным пользователям.Много безумных вещей можно сделать ...
Если бы не было такой системы видимости, компилятору, вероятно, нужно было бы скомпилировать ее иначе.
... Однако конечный программист обычно неТ нужно знать эту деталь.Среды IDE не включают синтетические методы в завершение кода, и я надеюсь, что компиляторы (кроме Jasmin) не позволят вам его использовать.Поэтому, если вы не генерируете байт-код и не используете Reflection API и игнорируете эти методы в трассировке стека, вам, вероятно, не нужно знать эту деталь.