2010-09-20 5 views

Antwort

11

Im Allgemeinen ist dies in der Tat, um Abwärtskompatibilität zu erhalten. Beachten Sie, dass die Kompatibilität auch auf der Bytecode-Ebene beibehalten werden muss, und das Ändern des Rückgabetyps den Bytecode ändert. Wenn also Unterklassen vorhanden sind, die die betreffende Methode möglicherweise überschrieben haben, würde ein Wechsel zu einem kovarianten Rückgabetyp diese Klassen unterbrechen.

Da Graphics2D abstrakt ist, ist es offensichtlich als Unterklasse zu verstehen, daher gilt das obige Argument.

Java Generics and Collections, obwohl konzentriert sich mehr auf die Generika Sicht, enthält eine Diskussion über kovariante überschreiben in Abschnitt 8.4.

4

Das würde Binärkompatibilität brechen. Zuvor kompilierte Klassen können die Methode mit dem neuen Rückgabetyp nicht finden. JLS3 §13.4.15, §13.4.12