Ich gehe durch JLS Abschnitt 9.3.1 und ich stieß auf ein interessantes Konzept der ambigen Erbfelder. Dies ist das Beispiel von JLSSchnittstelle zweideutig geerbt Felder
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;
}
Es ist möglich, mehrdeutige Felder geerbt zu haben. Aber wenn ich versuche, das Feld zu referenzieren und auf es zuzugreifen, gibt es Kompilierungszeitfehler. Angabe eines Kompilierzeitfehlers für ambivalente Felder Meine Frage ist, warum der Compiler sich nicht zuerst beschwert hat, als das ambivalente Feld vererbt wurde. Warum zur Zugriffszeit gibt es dieses Problem? Wenn wir das gleiche bei der Verwendung von Klassen tun., Erlaubt es. Warum nicht bei Interfaces. Mein Punkt ist, dass es im ersten Moment nicht erlaubt sein sollte. Die Klärung dieses Konzepts wird sehr hilfreich sein.
Ich kenne den historischen Grund nicht, aber beachten Sie, dass in dem Beispiel nicht ** alle ** die Konstanten mehrdeutig sind. Was würde also passieren, wenn Sie die Schnittstellen mischen und ohne die mehrdeutigen Konstanten verwenden möchten? –