Я просматриваю раздел JLS 9.3.1, и я натолкнулся на интересную концепцию неоднозначных унаследованных полей. Это пример из JLSИнтерфейс неоднозначно унаследованных полей
interface BaseColors {
int RED = 1, GREEN = 2, BLUE = 4;
}
interface RainbowColors extends BaseColors {
int YELLOW = 3, ORANGE = 5, INDIGO = 6, VIOLET = 7;
}
interface PrintColors extends BaseColors {
int YELLOW = 8, CYAN = 16, MAGENTA = 32;
}
interface LotsOfColors extends RainbowColors, PrintColors {
int FUCHSIA = 17, VERMILION = 43, CHARTREUSE = RED+90;
}
Это позволяет иметь неоднозначные поля, унаследованные. Но когда я пытаюсь ссылаться на поле и получать доступ к нему, он дает ошибку времени компиляции. Предоставление ошибки времени компиляции для неоднозначных полей. Мой вопрос, в первую очередь, почему компилятор не жаловался, когда неоднозначное поле было унаследовано. Почему во время доступа это дает эту проблему? Если мы делаем то же самое при использовании классов., Это позволяет. Почему бы и нет в случае интерфейсов. Я хочу сказать, что он не должен допускать только в первый момент. Разъяснение этой концепции будет весьма полезным.
Я не знаю историческую причину, но заметьте, что в примере не ** все ** константы неоднозначны. Итак, что произойдет, если вы хотите смешивать интерфейсы и использовать их без двусмысленных констант? –