Unterscheid Abstrakte Klassen/Interface Klassen?

  • Themenstarter Themenstarter Messer-Jockel
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
M

Messer-Jockel

Gast
Kann mir jemand in zwei, drei Sätzen kurz erläutern worin der Unterscheid zwischen abstrakten Klassen und interface Klassen besteht? Die bieten doch BEIDE "körperlose" Methoden an. Ok, abstrakte Klassen bieten Variablen und Interfaces bieten Konstanten (FINAL) statt Variablen an. Aber ist das der gesamte Unterscheid? Wann benutzt wann was genau? Besten Dank!!! :roll:
 
Abstrakte Klassen nutzen, wenn eine Hierarchie dargestellt wird.
Interfaces nutzen wenn eine (Klassen-)Hierarchieübegreifende Eigenschaftsmenge beschrieben werden soll.

Uuupps: Das waren ja nur 2 Sätze. 😳
 
Code:
Hierarchieübegreifende Eigenschaftsmenge
Was verstehst du darunter genau?
 
abstrakte Klassen werden nicht "implementiert" (implements) sondern "erweitert" (extends)... du kannst nur eine abstrakte Klasse erweitern (keine Mehrfachvererbung).. aber jede Menge Interfaces.
Ein Interface hat nur die Methodenköpfe.
Eine abstrakte Klasse kann zusätzlich Methodenrümpfe enthalten.
Beiden gemeinsam ist die Tatsache, das davon abgeleitete Klassen (oder die Klassen weiterer Ableitungen) zu jedem angegebenen Methodenkopf auch einen Methodenrumpf anbieten müssen.
 
Hallo,
wann sollte man abstrakte Klassen, wann interfaces und wann ganz normal Klassen als "Oberklassen" verwenden? Gibts da irgend eine Regel?
 
wann kommst du von A nach B zu Fuss, schwimmend oder über eine Brücke?
-> wenn es einen zu Fuss-Weg gibt, einen Teich dazwischen oder ein Schlucht mit Brücke darüber

Programmierenscheidungen hängen nicht von Regeln ab,
du machst das, was in der jeweiligen Situation BENÖTIGT wird..
 
Ich würde mal sagen, dass es dafür keine pauschale Regel gibt, mit der man alles erschlagen kann. Das Buch von Joshua Bloch(Java guru und Mitentwickler selbiger Programmiersprache) Effective Java, gibt hier einen guten Überblick was wann verwendet werden sollte.

Es kommt hier nicht nur darauf an was man Programmieren möchte, sondern wie.
Man kann einen Sachverhalt mit Interfaces, Superklassen oder Abstrakten Klassen darstellen.

Interfaces geben "nur" an welche Methoden eine Klasse enthält. Also welche Schnittstellen zur Aussenwelt ein Programm mindestens enthält.
Eine Klasse kann mehrere Interfaces implementieren.
z.B. Auto implements KannFahren, Boot implements KannSchwimmen, ==> Amphibienfahrzeug implements KannFahren, KannSchwimmen

Abstrakte Klassen sollte man verwenden wenn man sicherstellen möchte, das eine Methode der Subklasse auch tatsächlich implementiert wird. Wenn ich z.B eine Normale Klasse als Oberklasse habe und nun davon in mehreren verschiedenen Klassen erbe und dort jeweils die gleichen Methoden überschreibe und zudem vllt. noch die eigentliche Oberklasse nie wirklich benutze. So habe ich zumindest mal einen Kandidaten für die Abstrakte Klasse und eine abstrakte Methode.

Normale Klassen als "Oberklassen" werden oftmals "schlecht" verwendet (Gehörte selbst dazu). Eine Klasse als Superklasse, sollte nur die wirklich Notwendigen öffentlichen Methoden und Variablen haben, die es wirklich brauch. Wenn man nun davon erbt, stellt man oftmals fest, das man irgendetwas aus der Suberklasse braucht und nicht darauf zugreifen kann. Nun sollte man aber nicht die Superklasse ändern sondern die Subklasse darauf anpassen.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben