Когда вы вызываете метод callInner
, вы фактически находитесь в области действия Outer
класса.И причина, по которой компилятор принимает вызов new Inner()
, точно такая же, почему вам не нужно явно указывать, из какого класса происходит ваша воображаемая статическая переменная (когда это часть того же класса, который вы вызываете).См. Пример ниже:
public class Outer {
private static int x = 1;
private void innerCall() {
x++;
}
}
В вышеприведенном случае вы делаете то же самое, что и в вашем примере, за исключением того, что вы используете класс, а не переменную (что здесь не очень важно).Ваш синтаксис был бы необходим, если бы вы хотели получить доступ к классу / переменной извне класса (области видимости).Тогда это будет выглядеть следующим образом:
public class Outer {
public static int x = 1;
}
Outer.x++;
Выше вы должны явно указать, из какой области вы хотите получить доступ к вашей переменной x
.Это как если бы вы хотели получить доступ к файлу из данного каталога.Если вы находитесь в этом каталоге, вы просто получаете доступ к файлу по его имени.Однако, когда вы находитесь за его пределами, вы должны также написать имя каталога, чтобы увидеть файл, который вы хотите получить.