Untertypen in Java
Untertypen
Wenn ein Typ O ein Obertyp eines Typs U ist, so nennen wir U auch einen Untertyp von O.
Damit ist jeder Typ auch Untertyp seiner selbst.
Wir haben bereits im Grundkurs den Typ »int« als Untertyp des Typs »double« kennengelernt.
Ein Untertyp eines Typs O, der nicht der Typ O selbst ist, wird echter Untertyp genannt.
Finden von Untertypen in der Dokumentation
Es ist grundsätzlich jederzeit möglich, zu einem vorhandenen Typ in einem Programm später noch einen weiteren Untertyp anzulegen, ohne daß der Typ dabei verändert werden muß. Daher ist es nicht möglich, zu einem Typ alle Untertypen anzugeben. Deswegen kann man in der Regel in der Dokumentation nicht alle Untertypen eines Typs vollständig auflisten, sondern höchsten die dem Autor der Dokumentation zum Zeitpunkt der Niederschrift der Dokumentation bekannten Untertypen (im Falle der Dokumentation von Java SE handelt es sich dabei praktisch um alle Untertypen, die es in Java SE gibt).
Untertypen in der Dokumentation finden Untertypen sind der Typ selber und alles, was unter “Known ” steht.
Außerdem darf man nicht vergessen, daß jeder Typ auch als Untertyp seiner selbst gilt, auch wenn er nicht unter einer All-Known -Überschrift aufgelistet wird.
In der Dokumentation des Typs »java.io.PrintStream« findet sich derzeit beispielsweise eine Auflistung der bekannten Untertypen unter der Überschrift “Direct Known Subclasses: ”.
ℛ Finden von Unter- und Obertypen Bekannte Untertypen stehen unter “Known ”, alle anderen Typen aus dem obersten Teil der Dokumentation (über der Linie) sind Obertypen.
final-Typen
Ein final-Typ ist in seiner Dokumentation mit »final« (beispielsweise »final class«) gekennzeichnet und hat außer sich selbst keine weiteren Untertypen und kann auch niemals welche erhalten. Daher kann man hier alle Untertypen vollständig angeben: der einzige Untertyp eines final-Typs ist er selber.
Vererbliche und Nicht-vererbliche Aussagen *
Aussagen in der Dokumentation eines Referenztyps gelten im allgemeine auch für alle Untertypen, falls in der Dokumentation des Untertyps nichts anderes festgelegt wird.
In der Dokumentation der Klasse »java.lang.Object« findet man auch eine nicht-vererbliche Aussage über das Verhalten der Auswertung von »toString()«. Solch eine nicht-vererbliche Aussage wird mit “for class ” gekennzeichnet, sie gilt dann nur für diese Klasse (“for class ”), auf deren Dokumentationsseite sie steht, selber, aber nicht notwendigerweise für Untertypen. Solche nicht-vererblichen Aussagen sind aber selten.
Untertypen bei konstruierten Typen ⃗
Wenn »U « ein Untertyp von »O « ist und »T « ein beliebiger generischer Typ, dann folgt daraus nicht, daß der konstruierte Typ »T (U )« auch ein Untertyp des konstruierten Typs »T (O )« ist (außer wenn »U « gleich »O « ist)! Beispielsweise ist ist »java.util.ArrayList<java.lang.String>« kein Untertyp von »java.util.ArrayList<java.lang.Object>«!
Ist aber der generische Typ »U « ein Untertyp des generischen Typs »O «, dann ist für einen beliebigen Typ »T « der konstruierte Typ »U (T )« ein Untertyp des konstruierten Typs »O (T )«. Beispielsweise ist ist »java.util.ArrayList<java.lang.String>« ein Untertyp von »java.util.AbstractList<java.lang.String>«!
Übungsfragen ⃗
? Übungsfrage ⃗
Ist »java.lang.Comparable<java.lang.String>« ein Untertyp von »java.lang.Comparable<java.lang.CharSequence>«?
? Übungsfrage ⃗
Ist »java.lang.Comparable<java.lang.String>« ein Untertyp von »java.lang.Comparable<java.lang.String>«?
? »java.io.PrintStream« ⃗
Wie viele Untertypen hat der Referenztyp »java.io.PrintStream« mindestens?
? »java.lang.String« ⃗
Wie viele Untertypen hat der Referenztyp »java.lang.String«?
? »java.lang.CharSequence« ⃗
Wie viele Untertypen hat der Referenztyp »java.lang.CharSequence« mindestens?
Nennen Sie alle Untertypen von »java.lang.CharSequence«, die Sie in der Dokumentation finden können!
segment /ˈsɛgmənt/