Michilee: Extend, Implement, Abstract

Beitrag lesen

Hi Richard,

» 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.

vielen dank, habe ich mir angeschaut. Die dritte Grafik von oben leuchtet mir aber nicht ganz ein:

http://www.baldenhofer.eu/images/blog/grundlagen/interfaces.png

  • Ich habe die ClassA  mit imlements InterfaceB
  • ClassB und ClassBWebwersvices sind eigentständige Klassen mit fertigen Methoden.
  • Was macht nun das Interface InterfaceB nun genau. Ist es nun einfach ein Interface in der die Methoden von ClassB und ClassBWebservice drin stehen, die dann für ClassA vorgeschrieben werden oder läuft dies anders ab. Das erstere wüde wohl wenig sinn machen, wenn ich in ClassA alle Methoden implementieren muss, die mir das Interface vorschreibt.

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.

Ja, war von mir ein ganz blödes Beispiel. Hätte anstatt Seriazible eine willkürliche eigene Klasse nehmen sollen.

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?

Klasse A
Interface I
Klasse X extend A und implementiert I

Ich könnte ja wie gesagt das Objekt so bilden:

  1. I a = new X();
    oder
  2. X a = new X();
  3. A a = new X();

Von Typ her wären beide gleich. Funktionalität wäre womöglich bei beiden auch gleich. Du schriebst, sobald ich als Typ I angebe beim Objekt bilden (hoffentlich habe ich dich nicht falsch verstanden), dann bringt das Vorteile bei der Erweiterbarkeit.

Sollte ich beim Objektbilden in der Variante 2) das Inteface erweitern, hätte bzw. müsste ich das ja eh in Klasse X implementieren. Ich checke hier genau den Vor- und Nachteil der oberen 3 Objektbildungen nicht.

Gut, dass meine Threads kürzer werden :-)

Grüße