Vorteil abstrakter Klassen (Java)?

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.


KathaHohenfels 
Beitragsersteller
 25.04.2022, 10:20

Warum können Interfaces keine Klassen erweitern? Ich meine die Klassen können das Interface ja implementieren und haben so mehr Methoden zur Auswahl?

Destranix  25.04.2022, 10:21
@KathaHohenfels

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.

KathaHohenfels 
Beitragsersteller
 25.04.2022, 10:22
@Destranix

Interfaces haben doch Methodenköpfe, die sie an Klassen weitergeben und diee somit erweitern um diese Methoden?

Destranix  25.04.2022, 10:23
@KathaHohenfels

Klar. Klassen können Interfaces implementieren.

Wobei sie die Klassen nicht direkt um die Methoden erweitern, denn die Implementierung dieser obliegt der Klasse.

orochi02  26.04.2022, 10:22
@KathaHohenfels

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