Java Reference
In-Depth Information
class A {...}
class B<T1, T2> {...}
class C<T1, T2, T3> extends B<T2, A> {...}
Ein Wildcard in der Basisklasse ist nicht möglich:
class A<T> {...}
class B extends A<?> {...} //Syntaxfehler
Bitte folgern Sie aus den Erläuterungen in Abschnitt 1.6 nicht, dass es grundsätzlich keine
Typkompatibilität bei der Vererbung im Zusammenhang mit Generics gibt. Wie schon
erläutert wurde, geht zwar nicht:
class A<T> {...}
A<Object> a = new A<String>(); //Syntaxfehler
Aber die „normale“ Kompatibilität ist bei Ableitung einer generischen Klasse B aus einer
generischen Klasse A weiterhin gegeben:
class A<T> {...}
class B<T> extends A<T> {...}
A<String> a = new B<String>();
Selbstverständlich gelten alle Bemerkungen auch im Zusammenhang mit Schnittstellen,
also bei der Ableitung einer Schnittstelle aus einer oder mehreren anderen Schnittstellen
und bei der Implementierung einer oder mehrerer Schnittstellen durch eine Klasse. Eine
parametrisierte Schnittstelle kann allerdings nur einmal implementiert werden und nicht
mehrfach für unterschiedliche Typen, wie das folgende Beispiel zeigt:
interface I<T> {...}
class A {...}
class B {...}
class C implements I<A>, I<B> {...} //Syntaxfehler
Eigene Ausnahmeklassen, die z. B. aus Exception abgeleitet werden, dürfen übrigens keine
generischen Klassen sein:
class MyException<T> extends Exception {} //Snytaxfehler
Ausnahmen dürfen aber Typparameter von Klassen oder Schnittstellen sein:
interface I <E extends Exception>
{
public void m1() throws E;
public void m2() throws E;
}
 
Search WWH ::




Custom Search