Что такое двусмысленность?
Если два поля с одинаковым именем унаследованы интерфейсом , потому что, например, два из его прямых суперинтерфейсов объявить полей с таким именем, то один неоднозначный член. Любое использование этого неоднозначного члена приведет к ошибке времени компиляции. Таким образом, в примере:
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;
}
в LotsOfColors интерфейс наследует два поля, названные YELLOW. Это в порядке до тех пор, пока интерфейс не содержит ссылок на простое имя в поле ЖЕЛТЫЙ. (Такая ссылка может произойти в пределах инициализатора переменного для поля.)
Даже если интерфейс PrintColors был дать значение 3 до желтого, а не значения 8, а ссылки на поле YELLOW в пределах интерфейса LotsOfColors будет по-прежнему be считается неоднозначным.
* «Я стараюсь, но не могу найти многословие» * - [Я тебе не верю] (http://i.imgur.com/eQBee.png). –
@alextsc - вы скупы;) – pap
Мое первое, хотя было: «Меня не волнует двусмысленность, но как _hell_ не жалуется Java на _fields_ в _interfaces._» 1.8 просто продолжает давать, я думаю, – RecursiveExceptionException