С Спецификация языка Java :
Если имя выражения состоит из одного Идентификатора , то должно быть ровно одно видимое объявление, обозначающее либолокальная переменная, параметр или поле в области видимости в точке, в которой встречается идентификатор .В противном случае возникает ошибка времени компиляции.
Если объявление объявляет конечное поле, значение имени является значением этого поля.В противном случае значением имени выражения является переменная, объявленная объявлением.
Если метод в суперклассе ссылается на определенное поле (статическое или иное) этого класса, то только объявление этого классаполе будет в поле зрения в этой точке;любые поля (статические или иные) подклассов не будут находиться в области видимости.Поэтому метод всегда будет использовать поле суперкласса, даже если подкласс наследует его и затеняет это поле.
Этот ответ полностью переписан на основе моего нового понимания вопроса.Ниже мой первый ответ, сохраненный для потомков.
С Спецификация языка Java :
Декларация d изполе, локальная переменная, параметр метода, параметр конструктора или параметр обработчика исключений с именем n затеняет объявления любых других полей, локальных переменных, параметров метода, параметров конструктора или параметров обработчика исключений с именем n которые находятся в области действия в точке, где d встречается во всей области действия d .
Это говорит о том, что компиляторы обязаны скрывать родительские переменные, независимо отстатичности.
Обратите внимание, что все это не относится к наследуемым методам, которые всегда используют исходные переменные независимо от того, скрывает ли их подкласс.Я подозреваю, что это не то, что вы хотели спросить.