Vorteil abstrakter Klassen (Java)?
...gegenüber Interfaces.
Also ich habe mir Folgendes notiert:
· Kann auch nicht-abstrakte Methoden definieren
· Kann auch finale Variablen enthalten
· Kann Schnittstelle und deren Methoden implementieren
· Kann andere Klassen erweitern
Allerdings bin ich mir nicht sicher, ob das so stimmt, denn: Es gibt doch auch Subinterfaces, also können diese auch Methoden von anderen Schnittstellen übernehmen? Und außerdem können Interfaces doch auch andere Klassen erweitern?
lg Kath
2 Antworten
Interfaces dienen quasi der groben Beschreibung einer Schnittstelle, während Abstrakte Klassen quasi wie normale Klassen fungieren sollen, die allerdings selbst nicht instanziert werden können, quasi um Redundanzen zu vermeiden und dergleichen.
Bis auf das sind Abstrakte Klassen und Interfaces quasi dasselbe.
Interfaces können keine Klassen erweitern, lediglich andere Interfaces.
Ist eben so designt.
Wäre auch unsinnig, denn wenn das ginge könnten Interfaces ja Methoden bekommen und Attribute und derartiges, was sie ja sonst nicht haben.
Interfaces haben doch Methodenköpfe, die sie an Klassen weitergeben und diee somit erweitern um diese Methoden?
Klar. Klassen können Interfaces implementieren.
Wobei sie die Klassen nicht direkt um die Methoden erweitern, denn die Implementierung dieser obliegt der Klasse.
interfaces erweitern keine klassen, weil interfaces nicht gedacht sind als richtige objekte. du willst ja nur mit den funktionen des interfaces arbeiten.
interfaces sind ein mittel um gegen etwas zu programmieren, dass dir die gebotene funktionalität anbietet, egal wie die implementierung aussieht.
da es egal ist wie die implementierung aussieht, wäre eine erweiterung einer klasse unsinnig, da du sonst eine referenzimplementierung (hauptimplementierung) angibst
vorteile gibt es kaum
abstrakte klassen sind offensichtlich ein werkzeug der vererbung aber vererbung sollte immer durchdacht sein
interfaces benutzt du um gegen eine schnittstelle zu programmieren. du versuchst nur mit gegebenen funktionalität zu programmieren statt einem eigentlichen objekt, weil das objekt egal ist solange du die funktionalität kriegst
bestes bsp.: listen.
ist mir doch fickegal ob ich mit einer arraylist oder nh linkedlist arbeite. gib mir einfach etwas, was mir die funktionalität einer liste bietet; in anderen worten etwas womit ich meine daten zusammentragen kann
abstrakte klassen sind eher um sowas wie nh basis zu bieten, von denen deine objekte erben können
das problem ist halt nur, dass komposition gegenüber vererbung bevorzugt werden soll, da es extrem leicht ist fehler zu machen in der vererbungshierarchie
vererbung ist ein mächtiges konzept aber wird eher missbraucht und java hat es eig gefühlt auch nur zum marketing eingeführt
Warum können Interfaces keine Klassen erweitern? Ich meine die Klassen können das Interface ja implementieren und haben so mehr Methoden zur Auswahl?