Использование внутреннего имени класса и имени объекта в 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, Кроме того, он объявляет объект (статический) класса ()Optionalstatic Optional Inner = new Optional();

Этот объект и имена классов (внутри классаOuter) такие же, которые естьInner, Программа отображаетOptional, Единственное выражениеOuter.Inner.obj вmain() ожидается отображениеInner но это нет. Фактический выход однакоOptional что является случаемOptional учебный класс.

Один из способов отображенияInner путем изменения имени объекта на что-то другое.

static Optional Inner1 = new Optional();

Из выводимых данных видно, что имя объекта (или переменная) выбрано над именем типа (классInner) потому что они имеют одинаковое имя. Какой конкретный случай применяется здесь?

Ответы на вопрос(3)

Ваш ответ на вопрос