class D { A id(A x){...} }
interface I { A id(A x); }
class C extends D {
Object id(Object x){...}
// liefert wie erwartet einen Compilerfehler
/** Fehlerausgabe wg. zweiter Regel:
* name clash: id(java.lang.Object) in C and id(A) in
* D have the same erasure, yet none
* overrides the other
* class C extends D{
* ^
*/
}
class E extends D implements I {
String id(String x){...}
Integer id(Integer x){...}
/** Diese Klasse wird OHNE Fehlermeldung
* compiliert! Das widerspricht der dritten Regel
* (S.16 Example 20) der Spezifikation
* Gilad Bracha hat dies als Compilerfehler bestaetigt
*/
}