Использование внутреннего имени класса и имени объекта в 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
) потому что они имеют одинаковое имя. Какой конкретный случай применяется здесь?