Richard: Extend, Implement, Abstract

Beitrag lesen

Hallo Michilee,

Oh, ja habe das new vergessen. Wo macht es bzw. worin sind die Unterschiede genau, wenn meineKlasse Seriazible implementiert und ich das Objekt mal so:

a) Seriazible a = new meineKlasse()

und einmal

b) meineKlasse b = new meineKlasse() verwende?

Siehe Programmieren gegen Schnittstellen. Wenn du nur die Funktionalität des Interfaces benötigst, gib auch nur das Interface als Typ an. Das bringt enorme Vorteile vor allem in der Erweiterbarkeit.

(Gelernt habe ich ja bisher, wenn man Seriazible nicht implentiere, sondern davon ableite, dass der Unterschied nur daran besteht, dass man bei der Variante implement kein Objekt von Seriazible verwenden kann)

Nein nein, du bringst da einiges durcheinander. Du wirst niemals mit new Serializable() ein Objekt von Serializable erzeugen können. Serializable ist ein Interface. Erben (im Sinne von extends) können davon nur andere Interfaces. Implementieren (im Sinne von implements) können es nur Klassen.

Nehmen wir an Seriazible implementiert die Klasse Abc.

Ein Interface kann keine Klasse implementieren.

Seriazible xyz = new meineKlasse()

Seriazible ist Klasse

Nein, Interface.

Seriazible a = new meineKlasse()

also
ImplementiereKlasse b = meineKlasse()

Überlege dir genau, welche Klasse hier welche Schnittstelle implementieren muss und wie die entsprechenden Passagen im Quellcode aussehen müssen.

Klasse A (A extends X und A implementiert B)
Klasse C (implementiert A)

Eine Klasse kann keine Klasse implementieren. Annahme für nachfolgende Betrachtung: C erbt von A.

  1. A m = new A (Typ A, B und X)

  2. B m = new A (Typ A, B und X)

  3. C m = new C (Typ C, B, A und X)

  4. A m = new C (Typ C, B, A und X)

  5. X m = new X (Typ X)

Stimmt.

(Bsp. wenn ich die Objektvariablen die in der Vererbungshierarchie drüber stehen, beim Erzeugen von 3) nicht gefüllt habe)

Wenn ihnen in der Klasse kein fester Wert zugewiesen wird und auch der Konstruktor das nicht erledigt, haben alle Variablen primitiven Typs einen Standardwert und alle Referenzen sind null.

Grüße
Richard