Я наткнулся на приведенный ниже фрагмент концепции на этой странице, которая объясняет, как переменные с тем же именем затеняются внутри нестатического / экземпляра метода экземпляра внутреннего класса:
public class ShadowTest {
public int x = 0;
class FirstLevel {
public int x = 1;
void methodInFirstLevel(int x) {
System.out.println("x = " + x); //23
System.out.println("this.x = " + this.x); //1
System.out.println("ShadowTest.this.x = " + ShadowTest.this.x); //0
}
}
public static void main(String... args) {
ShadowTest st = new ShadowTest();
ShadowTest.FirstLevel fl = st.new FirstLevel();
fl.methodInFirstLevel(23);
}
}
Я хочу выделитьчто здесь есть три аспекта:
- Мы создали экземпляр
FirstLevel
внутренний класс methodInFirstLevel
не является статичным - Мы обращаемся к
- переменная
x
локально по methodInFirstLevel
FirstLevel
переменная экземпляра this.x
ShadowTest
переменная экземпляра ShadowTest.this.x
Я быстро понял, что может быть много возможностей.Например:
- В пункте 1 выше я могу добавить:
- Мы можем решить не создавать экземпляр, то есть вызывать метод для имени класса
- Вместо этоговнутреннего класса (который определен как нестатический вложенный класс в той же ссылке выше), мы можем иметь дело с статический вложенный класс .
- В пункт 2 выше я могу добавить, вызывая статический метод
- В пункте три я могу добавить:
FirstLevel
статическая переменная ShadowTest
статическая переменная
Если вы проверяете, комбинации становятся довольно большими.Я попытался выяснить, как будет осуществляться доступ во всех этих случаях.На изображении ниже я попытался представить это в несколько структурированной форме.Я вычеркнул комбинации, которые невозможно по заданной причине красным шрифтом.Также я использовал имена классов InnerClass
, OuterClass
, StaticNestedClass
для большей наглядности (как в приведенной выше ссылке для других примеров).(#)
- это просто заполнитель, позволяющий мне думать о том, с каким классом я имею дело, пока буду ниже.Я поставил пули, чтобы вы отсылали это в комментариях и отвечали.Я не уверен во всем здесь, особенно в розовых тонах.
Это меня очень смущает, хотя я приложил все эти усилия.Я хочу, чтобы кто-то подтвердил.Хотя я могу кодировать это и проверять каждый случай, я сейчас очень истощен.
![enter image description here](https://i.stack.imgur.com/ve3Fk.png)
PS: Я могу быть на 200 +% глупее, если высказывать все эти ненужные мысли.Я мог бы просто вспомнить вещи в коде выше и охладить.Если это так, скажите, пожалуйста, тоже.