OOP subtyping vs. subclassing

JavaBoy

Neues Mitglied
Hallo,

ich wollte mal fragen, ob mir jemand zunächst subtyping und subclassing formal definieren kann und anschließend beide Begriffe von einander abgrenzen kann. Ich habe schon in verschiedenen Büchern nachgeschaut, aber leider nicht finden können, daher hoffe ich, dass ihr eine Idee habt, wie man das ganze mit einfachen Worten definieren kann.

Dankeschön!
 

Landei

Top Contributor
Subtyping ist ein Mechanismus, bei dem aus einem Typ einen anderen, eigenständigen Typ erzeugen kann, der jedoch auch überall dort verwendet werden kann, wo der ursprünglichen Typ erlaubt wäre.

Subklassing ist ein Mechanismus, mit dem die Funktionalität einer Klasse unter Nutzung der bereits vorhandenen Eigenschaften erweitert werden kann.

In den meisten OO-Sprachen (wie auch Java) fallen beide Konzepte in Form der Vererbung zusammen. Ich würde das Implementieren von Interfaces eher nicht als Subclassing sehen, sondern nur als Subtyping (jede implemende Klasse kann überall dort eingesetzt werden, wo das Interface erlaubt ist, aber es wird nirgendwo vorhandene Funktionalität erweitert).

Man könnte sich auch Fälle vorstellen, wo es aus Gründen der Typsicherheit sinnvoll wäre, von einer Klasse ableiten zu können (Subclassing), ohne dass eine Subtyping-Beziehung entsteht (so dass man z.B. eine Klasse "Name" von String ableiten könnte [wenn dieser nicht final wäre], die aber nicht in Methoden verwendet werden könnte, die String verlangen, sondern nur, wo wirklich "Name" gefordert ist). Als einziges reales Beispiel fällt mir [c]newtype[/c] in Haskell ein, das (in etwa) so etwas erlaubt.
 

Oben