我正在經歷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;
}
它允許有不明確的字段被繼承。但是,當我嘗試引用該字段並訪問它時,它會給編譯時間帶來錯誤。爲ambigious字段提供編譯時錯誤。我的問題是,起初爲什麼編譯器沒有抱怨,當這個隱藏的領域被遺傳時。爲什麼在訪問時間,這是給這個問題?如果我們在使用類時也是這樣,它允許。爲什麼不在接口的情況下。我的觀點是它不應該只在第一時間允許。澄清這個概念將非常有幫助。在接口
我不知道歷史原因,但請注意,在例子中,不是所有**的常量都是模糊的。那麼,如果你想混合接口並使用它而沒有模棱兩可的常量,會發生什麼? –