Ответ 1
Объявление d метода с именем n затеняет объявления любых других методов с именем n, которые находятся в закрывающей области в точке, где d встречается во всей области d.
Что может быть интерпретировано как "объявление foo
(унаследовано от ClassA
), затеняет объявление любых других методов с именем foo
, которые находятся в охватывающей области (ClassB
) в точке, где foo
происходит во всей области foo
."
Также уместно - раздел 15.12.1:
15.12.1 Время компиляции Шаг 1: определение класса или интерфейса для поиска
Первым шагом в обработке вызова метода во время компиляции является определение имени вызываемого метода и класс или интерфейс для проверки определений методов этого имени. В зависимости от формы, предшествующей левой скобке, необходимо рассмотреть несколько случаев:
- Если форма Имя метода, то есть три подслучая:
- Если это простое имя, то есть только идентификатор, тогда имя метода будет Идентификатором. Если Идентификатор появляется в пределах области действия (§6.3) объявления видимого метода с этим именем, тогда должно существовать объявление типа вложения, членом которого является этот метод. Пусть T - самое внутреннее объявление такого типа. Класс или интерфейс для поиска - T.
- Если это квалифицированное имя формы TypeName.Identifier, тогда [...]
- Во всех остальных случаях квалифицированное имя имеет форму FieldName.Identifier; затем [...]