Erbangelegenheiten … und "comprises"

< Beitrag >

< Thread >

Re: Kennst du DRY?

Avatar von iUniversEi

iUniversEi

81 Beiträge

22.11.2012 00:14 Permalink
OscarWild schrieb am 21. November 2012 16:39

> Nein, Du kannst damit festlegen, wer überhaupt erbberechtigt ist.
> Hier: Error und Exception dürfen von Throwable abgeleitet werden, die
> Klasse Hugo aber nicht (sie ist nicht unter comprises aufgeführt).


Ich spiel mal durch, was genau mir sowas bringen könnte:

Ich kann ja wohl kaum eine "Erbberechtigung" an eine Klasse vergeben,
die es noch gar nicht gibt.

Ich kann zwar eine Erbberechtigung an eine Klasse vergeben, die es
gibt, die aber aktuell nicht erbt, allerdings wäre das reichlich
schwachsinnig.

Also bleibt ja nur noch der letzte Fall, Erbberechtigung nur an die
Klassen zu geben, die auch tatsächlich erben. Von daher komme ich auf
die Bezeichnung "vererben", denn semantisch ist es genau das.

Entscheidend dabei ist, dass z.B. bei der Kette A->B->C wenn A
comprises B gilt, A formal keine Erbberechtigung an C vergibt, C aber
trotzdem von A (implizit über B) erben kann!

Was an dieser Stelle eventuell sinnvoller gewesen wäre, ist Modifier
einzuführen, die ähnlich zu public/private/etc. sind. Zum Beispiel:

public class A comprises private {
}

Anstatt dann namentlich die erbberechtigten Klassen aufzuführen hätte
man hier sagen können:
comprises private erlaubt alle nested classes oder Klassen in der
selben Kompilierungseinheit zu erben
comprises protected erlaubt allen Klassen im namespace zu erben
comprises public erlaubt allen Klassen zu erben

Für das Exception-Beispiel:

public class Throwable comprises protected {....}
public class Exception implements Throwable comprises public {...}

Da Exception und Throwable beide in java.lang.* liegen, darf
Exception von Throwable erben. Klassen in org.foobar.* dürfen nur von
Exception erben.

Thread-Anzeige einblenden

Anzeige