пятница, 25 января 2008 г.

Java Puzzle 68: Shades of Gray

Рассмотрим следующую программу. В классе X две декларации с одинаковым именем. Что программа напечатает? Black или White? Это, вообще, допустимый код?
public class ShadesOfGray {
    public static void main(String[] args) {
        System.out.println(X.Y.Z);
    }
}
class X {
    static class Y {
        static String Z = "Black";
    }
    static C Y = new C();
}
class C {
    String Z = "White";
}
Вполне легальный код. Он даже в спецификации описан: когда переменная и тип с одинаковым именем находятся в одной области видимости, то имя переменной имеет предпочтение (JLS 6.5.2). Т.е. программа напечатает White. Аналогичным образом, имена переменных и типов могут перекрывать имена пакетов.
Хорошо, что программы, использующие соглашения по именованию, практически никогда не столкнутся с такой проблемой.

Комментариев нет:

Отправить комментарий