Рассмотрим следующую программу. В классе 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. Аналогичным образом, имена переменных и типов могут перекрывать имена пакетов.
Хорошо, что программы, использующие соглашения по именованию, практически никогда не столкнутся с такой проблемой.
Комментариев нет:
Отправить комментарий