Использование внутреннего имени класса и имени объекта в Java
В следующем фрагменте кода, вероятно, кажется, что он должен выдать ошибку компиляции, но это не такт:
class Outer {
public static class Inner {
static String obj = "Inner";
}
static Optional Inner = new Optional();
//The (inner) class name and the object name are same.
}
class Optional {
String obj = "Optional";
}
public class Main {
public static void main(String[] args) {
System.out.println(Outer.Inner.obj);
//Refers to the string inside the optional class
}
}
КлассOuter
имеет статический класс внутри с именемInner
, Кроме того, он объявляет объект (статический) класса ()Optional
static Optional Inner = new Optional();
Этот объект и имена классов (внутри классаOuter
) такие же, которые естьInner
, Программа отображаетOptional
, Единственное выражениеOuter.Inner.obj
вmain()
ожидается отображениеInner
но это нет. Фактический выход однакоOptional
что является случаемOptional
учебный класс.
Один из способов отображенияInner
путем изменения имени объекта на что-то другое.
static Optional Inner1 = new Optional();
Из выводимых данных видно, что имя объекта (или переменная) выбрано над именем типа (классInner
) потому что они имеют одинаковое имя. Какой конкретный случай применяется здесь?