Warum ist Vererbung angeblich problematisch?

Maik.Neumann

Aktives Mitglied
Hallo zusammen !

In Bezug auf OOP wird ja immer wieder gesagt, dass man möglichst Vererbung vermeiden sollte und stattdessen lieber auf die Verwendung von Interfaces zuürckgreifen sollte.

Mir persönlich ist aber nicht so ganz klar, warum Vererbung zu Problemen führen sollte und die Verwendung eines Interface hingegen nicht.

Kann mir da vielleicht jemand etwas zu sagen? Baue ich mir mit Vererbung einfach ein zu starres Gerüst für eine Applikation auf?

Danke und Gruß
 

Natac

Bekanntes Mitglied
Genau, es wird "zu starr". Mit Vererbung legst du den Supertyp für deine Klasse schon fest und kannst ihn später auch nicht mehr ändern. Mit einem Interface bist du da wesentlich flexibler, da deine Klasse auch meheren Interfaces implementieren kann.

Zudem wird Vererbung manchmal auch missbraucht, indem sie in Situationen eingesetz wird, wo man auch einen Konstuktor normal aufrufen könnte.
Falsch:
Java:
public class MyFrame extends JFrame{
  public MyFrame(){
    add(new JLabel("Hello"));
    add(new JButton("World"));
  }
}
Richtig:
Java:
JFrame frame = new JFrame();
frame.add(new JLabel("Hello"));
frame.add(new JButton("World"));

Natürlich hat Vererbung auch seine Berechtigung und ist in vielen Situationen sehr sinnvoll. Java würde nicht so funktionieren wie es das tut, wenn es keine Vererbung gäbe.
 
Zuletzt bearbeitet:

stg

Top Contributor
Die Aussage ist in dieser Form mMn einfach Blödsinn!

Natürlich kann und sollte man auf Vererbung setzen, sofern es denn angebracht ist. Interfaces setzt du ein, um Schnittstellen nach außen zu definieren, Vererbung für die Spezialisierung eines Typs. Es widerspricht völlig dem OOP-Denken für jeden speziellen Typ alle Funktionalitäten separat implentieren zu müssen. Eine Änderung, die sich auf alle speziellen Typen auswirkt, sollte dann nur in der gemeinsamen Basisklasse notwendig sein.
Seit Java 8 haben wir zwar auch die Möglichkeit sogar in Interfaces konkrete default-Implementierungen mitzugeben, aber diese sind implizit dann immer public, was für die Schnittstelle nach außen hin natürlich schon eine große Einschränkung ist (Stichwort Kapselung und Information Hiding)
 

Thallius

Top Contributor
Interfaces sind eine Krücke für Mehrfachvererbungen. Da Mehrfachvererbungen aber eh immer sehr kritisch sind würde ich immer davon Abstand nehmen wenn es sich irgendwie vermeiden läßt.

Ansonsten schließe ich mich der Meinung von stg voll an. Interfaces waren und sind nicht dafür gedacht das OOP neu zu erfinden und Vererbung zu ersetzen. Gerade das alle Methoden Public sind führt das OOP sogar ad absurdum, wobei ich heutztage immer mehr beobachte, dass viele "Programmierer" sowiso alle Methoden als public deklarieren weil es ja viel einfacher ist, als sich vorher Gedanken über ein gutes Klassendesign zu machen.

Gruß

Claus
 

ARadauer

Top Contributor
Generell: Komposition ist Vererbung vorzuziehen.
Stell dir eine Spiel vor wo Spielfiguren schießen können. Du überschreibst nicht für jede Ausprägung die schießen Methode, sondern baust dir einfach Waffen und deine Spielfigur hat eine Referenz auf eine Waffe.
Dadurch ergibt sich im allgemeinen ein viel flexibleres Design.
 

Thallius

Top Contributor
Generell: Komposition ist Vererbung vorzuziehen.
Stell dir eine Spiel vor wo Spielfiguren schießen können. Du überschreibst nicht für jede Ausprägung die schießen Methode, sondern baust dir einfach Waffen und deine Spielfigur hat eine Referenz auf eine Waffe.
Dadurch ergibt sich im allgemeinen ein viel flexibleres Design.

Da kann ich Dir nicht folgen. In Deinem Beispiel hätte ich eine Klasse Spieler der eine property Waffe (oder auch WaffenArray) hat und ich hätte eine Klasse Waffe. wo brauche ich da jetzt Vererbung oder Interfaces?

Gruß

Claus
 

stg

Top Contributor
@Claus
Gar nicht. Darauf wollte er ja hinaus. In Vielen Fällen ist es besser auf Komposition statt auf Vererbung zu setzen, insbesondere in Hinblick auf Lose Kopplung. Dem ist natürlich im Allgemeinen zuzustimmen, aber meine Aussage von oben bleibt dadurch eigentlich unberührt. Vererbung wird oft falsch eingesetzt, aber das ändert nichts daran, dass das Konzept grundsätzlich sinnvoll ist und seine Daseinsberechtigung hat.
 

Thallius

Top Contributor
@Claus
Gar nicht. Darauf wollte er ja hinaus. In Vielen Fällen ist es besser auf Komposition statt auf Vererbung zu setzen, insbesondere in Hinblick auf Lose Kopplung. Dem ist natürlich im Allgemeinen zuzustimmen, aber meine Aussage von oben bleibt dadurch eigentlich unberührt. Vererbung wird oft falsch eingesetzt, aber das ändert nichts daran, dass das Konzept grundsätzlich sinnvoll ist und seine Daseinsberechtigung hat.

Ah ok,

da konnte ich nur dem Gedankensprung zur Komposition nicht folgen.

Also im Grunde sind wir drei uns einig :)

Gruß

Claus
 

Tobse

Top Contributor
Um auchnoch meinen Senf dazulassen:

Ich finde es auch schwachsinn, auf Vererbung zu verzichten. Um gerade nochmal das Beispiel mit den Waffen aufzugreiffen. Es gibt Klingen-Waffen und Feuerwaffen. Eine Pistole ist eine Feuerwaffe, genauso wie ein Gewehr. Beide haben einen Abzug, der (von wem auch immer) betätigt werden kann. Ein Katana ist zwar auch eine Waffe (ebenso wie die Pistole und das Gewehr), aber um es einzusetzen ist das simple betätigen eines Abzugs lange nicht genug.

Ich denke, Vererbung sollte überall dort eingesetzt werden, wo Eingeschaften und Funktionalitäten (abstrahiert) zusammengefasst werden können. Das alles sollte man aber sehr klein Modular aufbauen (wie ARadauer schon sagte), um die einzelnen Komponenten ohne veränderung am bestehenden Code erweitern und/oder austauschen zu können: Wenn der Spieler eine Methode
Code:
schießen
hat, dann aber ein Katana verwenden soll muss man umbauen. Hat der Spieler hingegen eine Methode
Code:
angreiffen
(oder noch besser
Code:
angreiffen(Objekt ziel)
), bleibt es dem jewailigen Charakter überlassen, wie er den Angriff bewerkstelligt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
M Vererbung - Polymorphie Java Basics - Anfänger-Themen 37
L Java- Vererbung Java Basics - Anfänger-Themen 4
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 12
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 1
I JSON / XML Struktur mit Vererbung / Interfaces Java Basics - Anfänger-Themen 0
M Interface oder Vererbung? Java Basics - Anfänger-Themen 12
M Vererbung Java Basics - Anfänger-Themen 6
M Designentscheidung von Attributen/Methoden im Falle von Vererbung Java Basics - Anfänger-Themen 8
M Generics Vererbung Listen Java Basics - Anfänger-Themen 2
A Methoden Vererbung und Interface Java Basics - Anfänger-Themen 14
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Java Basics - Anfänger-Themen 7
D Vererbung Java Basics - Anfänger-Themen 3
K Schleife berechnet kein Ergebnis (Vererbung) Java Basics - Anfänger-Themen 6
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
W Zur Vererbung: Wann und wie? Java Basics - Anfänger-Themen 35
H Datenkapselung, Vererbung und UML Java Basics - Anfänger-Themen 16
districon Super-Stichwort/ Vererbung Java Basics - Anfänger-Themen 3
YaU Vererbung erstellt NullPointerException? Java Basics - Anfänger-Themen 4
1 Vererbung Klassenattribute Java Basics - Anfänger-Themen 9
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
N Thema Vererbung Java Basics - Anfänger-Themen 31
A Vererbung Vererbung Übung Java Basics - Anfänger-Themen 5
B Vererbung - Sichtbarkeitsmodifikation - protected Java Basics - Anfänger-Themen 10
B Best Practice Unschlüssig ob Vererbung oder Interface Java Basics - Anfänger-Themen 2
G Java Vererbung Java Basics - Anfänger-Themen 8
Y Vererbung Konto - Anfangsprobleme Java Basics - Anfänger-Themen 7
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
M Vererbung mit Enums Java Basics - Anfänger-Themen 8
Kirby.exe Vererbung im Detail erklärt? Java Basics - Anfänger-Themen 9
N Modellierung, vererbung, Java Basics - Anfänger-Themen 163
M Fehlendes Verständnis für dynamische Bindung und Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung im Computerspiel Java Basics - Anfänger-Themen 7
J Probleme mit Vererbung Java Basics - Anfänger-Themen 4
I Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung und Problem bei Zählschleife in einer Methode Java Basics - Anfänger-Themen 10
W Methoden Verständnisfrage Vererbung von Methoden Java Basics - Anfänger-Themen 14
V Vererbung Java Basics - Anfänger-Themen 2
J Frage zur Vererbung Java Basics - Anfänger-Themen 1
J Vererbung Java Basics - Anfänger-Themen 3
U Was löst meine NullPointerException aus? (Vererbung) Java Basics - Anfänger-Themen 12
O Vererbung Ueben mit kleiner Datenstruktur von Räumen Java Basics - Anfänger-Themen 10
O Umgang mit Vererbung verstehen Java Basics - Anfänger-Themen 4
A Vererbung/Interfaces/Generics Java Basics - Anfänger-Themen 12
O Vererbung änderung des Konstruktors Java Basics - Anfänger-Themen 8
L Vererbung Java Basics - Anfänger-Themen 5
E HashMap+Vererbung Java Basics - Anfänger-Themen 11
E Vererbung super-Methoden Aufruf Java Basics - Anfänger-Themen 3
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
A Objekterstellung bei der Vererbung Java Basics - Anfänger-Themen 7
P Vererbung Warum funktioniert die Vererbung hier nicht Java Basics - Anfänger-Themen 14
S Vererbung Java mehrfach Java Basics - Anfänger-Themen 10
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
A Klassen Vererbung privater Methoden und Member Java Basics - Anfänger-Themen 12
A Konstruktoren Vererbung Java Basics - Anfänger-Themen 3
ReinerCoder Vererbung von JFrame in einer Klasse entfernen Java Basics - Anfänger-Themen 5
W Vererbung, abstract und Konstruktoren Java Basics - Anfänger-Themen 30
J Vererbung und Methodenaufruf Java Basics - Anfänger-Themen 11
G Polymorphie, Vererbung, statischer Typ, Laufzeittyp Java Basics - Anfänger-Themen 2
H Vererbung mit private instanzvariablen Java Basics - Anfänger-Themen 9
S Vererbung Funktionsweise Code zur Vererbung Java Basics - Anfänger-Themen 1
C Methoden Vererbung private Attribute/public Methoden Java Basics - Anfänger-Themen 4
S Verständnis Vererbung Java Basics - Anfänger-Themen 3
D JavaFX Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Generizität und Vererbung Java Basics - Anfänger-Themen 4
A Vererbung bei Klassen mit Objekt der Klasse im Konstruktor Java Basics - Anfänger-Themen 4
K Vererbung Octagon von Circle Java Basics - Anfänger-Themen 0
B Hilfe bei Vererbung Java Basics - Anfänger-Themen 2
D Vererbung Frage zum Klassenaufbau mit Vererbung Java Basics - Anfänger-Themen 1
T Vererbung und interface. Java Basics - Anfänger-Themen 1
S Gehaltsberechnung (Vererbung, abstrakte Methoden) Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 1
F Vererbung in zwei Richtungen? Java Basics - Anfänger-Themen 14
D Vererbung / Polymorphie Java Basics - Anfänger-Themen 5
O Vererbung Java Basics - Anfänger-Themen 5
MiMa Vererbung Theorie OK, Praxis ?? Java Basics - Anfänger-Themen 4
Arif Vererbung Vererbung Variablen überschreiben Java Basics - Anfänger-Themen 1
C Vererbung - Ausgaben bestimmen Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 10
L Setter und Getter/Vererbung Java Basics - Anfänger-Themen 6
C Konstruktoren und Vererbung Java Basics - Anfänger-Themen 2
J Kleinere Frage zur Vererbung/Objekterzeugung Java Basics - Anfänger-Themen 2
G Vererbung Java Basics - Anfänger-Themen 12
J Vererbung privater Variablen Java Basics - Anfänger-Themen 7
J Vererbung Vererbung von Methoden Java Basics - Anfänger-Themen 6
B Vererbung Java Basics - Anfänger-Themen 12
K Vererbung (super) Java Basics - Anfänger-Themen 2
A ArrayQueue mit Exceptions und Vererbung Java Basics - Anfänger-Themen 3
J Java: static bei Vererbung Java Basics - Anfänger-Themen 5
C Vererbung Java Basics - Anfänger-Themen 4
L Vererbung Java Basics - Anfänger-Themen 3
J Klassenorganisation | Vererbung Java Basics - Anfänger-Themen 1
B Vererbung Vererbung Java Basics - Anfänger-Themen 2
N Generics Vererbung Wildcard Interface Java Basics - Anfänger-Themen 8
A Benötige Hilfe bei Vererbung Java Basics - Anfänger-Themen 1
M Anfängerprobleme mit Vererbung Java Basics - Anfänger-Themen 27
J Vererbung Java Basics - Anfänger-Themen 9
F Vererbung von Attributen zwischen zwei Klassen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben