Unterschied abstract & Interface
-
Hallo,
wälze mich jetzt seit Tagen durch zig Hilfen und Büchern. Komme soweit auch mit Java klar. Mir ist nur der Unterschied zwischen einer abstrakten Klasse und einem Interface nicht ganz klar bzw. der tiefere Sinn der dahinter steht. Beide implementieren Methoden ohne Rumpf. Was ist jetzt genau der Unterschied?
-
Guck doch mal in der FAQ ... da wird das Thema auch besprochen
-
Hab ich schon vor meinem ersten Posting gelesen. Leider werd ich nicht schlauer daraus. Ich kapiere einfach den grundlegenden unterschied nicht. Könnt ihr vielleicht ein Beispiel geben wann das eine und wann das andere sinnvoll ist?
Wäre wirklich sehr dankbar wenn sich jemand bereit erklären würde
-
Hi
Ich versuch es mal.
In der OOP hat man das Glück das man Methoden und Attribute vererben kann.
In Java ist das jetzt so das eine Klasse nur von einer Oberklasse erben kann.public class Oberklasse{ } public class Unterklasse extends Oberklasse{ }
Jetzt hat man aber ein kleines Problem, man will von verschieden Klassen erben und genau das geht mit extends nicht.
Dafür kann man nun mit Interfaces die Klasse zwingen gewisse Methoden zu implementieren.
Die Interfaces sind quasi ein ersatz dafür das es keine echte Mehrfachvererbung in Java gibt.
Hoffentlich hilft dir das jetzt weiter.
BYE
-
Hi Mark,
ist eigentlich ganz einfach:
eine abstrakte Klasse ist eine Klasse, von der Du keine Instanzen erzeugen kannst, da sie abstrakte Methoden enthält. Sie dient als Grundgerüst für Subklassen, die dann die abstrakten Methoden definieren. Also z.B. eine Basisklasse, die diverse Funktionalitäten implementiert, aber in wenigen essentiellen Bereichen eben Unterschiede hat, die in den Subklassen (klassenabhängig) definiert werden müssen, aber die Basiseigenschaften werden eben nur einmal implementiert.Eine Schnittstelle läßt sich zwar grundsätzlich behandeln und vererben wie eine Klasse, dient aber dazu, gewisse Eigenschaften zu strukturieren, die Du dann beliebigen Klassen mit auf den Weg geben kannst. Klassisches Beispiel hier sind eben Thread, und diverse Eventhandler.
Und nun der Gag an der Sache:
Java kann eigentlich nur von einer Klasse erben, anders als z.B. bei C++. Da aber manchmal diverse Zweige in der Klassenhierarchie wiederum ähnliche Verhalten aufweisen, kannst Du das mit Einfachvererbung nicht realisieren. Also baust Du Deine Klassenhierarchie ganz normal auf, gibst aber einigen Klassen eben die Schnittstellen mit auf den Weg. Und, Du kannst jeder Klasse mehrere Schnittstellen mit geben!Der Gag an der Sache ist der, daß Java eigentlich nur Einfachvererbung unterstützt, was aber sehr einschränkend wirken kann. Durch die Möglichkeit, mehrere Schnittstellen weiterzugeben, kannst Du quasi Mehrfachvererbung bei den Klassen umsetzen.
So, und jetzt schlagt mich nicht, daß ich das als quasi Mehrfachvererbung bezeichnet habe.... so sieht man aber IMHO den Unterschied am besten...
-
Original erstellt von jogix:
**
eine abstrakte Klasse ist eine Klasse, von der Du keine Instanzen erzeugen kannst, da sie abstrakte Methoden enthält.**Anmerkung:
Die abstrakten Methoden sind nicht zwingend nötig. Eine Klasse kann auch ohne abstrakte Methoden abstrakt sein. ...bei mir kommt das sogar öfter mal vor.