Wann Vererbung und wann Interface verwenden?

kossy

Bekanntes Mitglied
Hallo zusammen !

Häufig steht man vor der Frage, wann man eine Vererbungshierarchie aufbauen soll und wann es besser ist, ausschließlich mit Interfaces zu arbeiten.

Der Grundtenor lautet ja: Lieber mit Interfaces arbeiten, als mit Vererbungen.

Aber dennoch stellt sich mir die Frage, wann ich was verwenden soll. Gibt es dafür so eine Art Pauschalantwort? Danke für die Hilfe !

Grüße
Kossy
 

Crian

Top Contributor
Eine Pauschalantwort gibt es nicht. Aber wenn man sich aus (guten Gründen) für eine Vererbung entschieden hat, dann sollte einem klar sein, dass man die Klassen nicht auch noch von anderen Quellen erben lassen kann. Wenn man also nicht wirklich Basisfunktionalität braucht, sondern nur die Schnittstelle, dann sollte man Interface verwenden.

Ggf. lässt sich auch beides verwenden, um gegen das Interface zu programmieren, aber dennoch Basisfunktionalität in einer Klassenhierarchie zu haben, die sowohl von der Basisklasse erbt als auch das Interface implementiert.
 

pl4gu33

Top Contributor
Naja, Vererbung is denke ich sinnvoll, wenn man ein Oberbegriff hat z.b. Person und dann Unterpersonen wie Arbeitnehmer, Arbeitgeber.

Interface sind denke ich sinnvoll, wenn man zum Beispiel zwischen Schichten eine "Kommunikation" herstellen will und somit gewährleistet, dass bestimmte Methoden auf jeden Fall vorhanden und implementiert sind.

lasse mich da auch gern verbessern ;)
 
Zuletzt bearbeitet:
A

asdasdasddas

Gast
Hallo ein Beispiel wäre vielleicht sowas für Vererbung:
Java:
public class Auto {

	public void fahren(){
		System.out.println("Brumm");
	}
}
public class Audi extends Auto{}
public class VW extends Auto{}
So, bei der Vererbung gibt das Auto das Verhalten "fahren" vor.
Wenn also ein Subobject ein Verhalten vom SuperObject haben soll, dann nimmt man die Vererbung.

Beispiel bei Interfaces:
Java:
public interface Person {
	void pipiMachen();
}
public class MaenchlichePerson implements Person{
	@Override
	public void pipiMachen() {
		System.out.println("stehend");
	}
}

public class WeiblichePerson implements Person{
	@Override
	public void pipiMachen() {
		System.out.println("sitzend");
	}
}

So das Interface Person gibt vor was die Klasse(Object vo Typ Person) implementieren müssen, aber nicht wie sie es machen. Also muss jede Klasse für das Verhalten selber sorgen.
Vielleicht wird es dadurch klarer.

Mfg
 
V

vanny

Gast
der Aspekt der Kommunikation verschiedener Klassen trifft es eigentlich recht gut.

Unterperson klingt so diskriminierend^^.
Ich habe aktuell ein Projekt, bei dem ich die Personen als Interface nutze.
In meinem Fall geht es um die reinen PersonenDaten, welche gleichrangig für Einlieferer und Kunden behandelt werden.

Es würde sich auch anbieten, das Interface zu nutzen, wenn es Arbeitgeber und Arbeitnehmer wären, solange es nur um die PersonenDaten ginge.

Wenn mans verallgemeinern möchte, dann "Vererbung/Delegation bei Hierachie" und "Interface bei gleichrangiger Behandlung".
Gibts natürlich noch viel mehr Anwendungsmöglichkeiten ist aber vielleicht schon mal ne Entscheidungshilfe für dich.

Gruß Vanny
 
T

Tomate_Salat

Gast
Ich programmiere sehr gerne gegen Interfaces. Die eigentl. Anwendung bezieht sich dann fast ausschließlich darauf und ich kann einfach Implementierungen austauschen (vor allem, da ich Guice einsetze).

Von Klassen erben zu lassen, macht eben dann Sinn, wenn man bestehenden Implementierungen weiter verwenden will (Redundants vermeiden).

Wo ich keine Interfaces einsetze sind bei (ich nenns mal) Property Holder. Also z.B.:
Java:
public class DBFiel {
private String name;
private boolean isNullAble;
//... usw

public DBField(String name, boolean isNullAble, ...)

public String getName() //...
}

aber pauschalisieren würde ich da jetzt nichts. Das kann sich von Anwendungsfall zu Anwendungsfall zu Programmierers vorlieben immer wieder unterscheiden.
 

tfa

Top Contributor
Von Klassen erben zu lassen, macht eben dann Sinn, wenn man bestehenden Implementierungen weiter verwenden will
Das ist meiner Meinung nach einer der größten Fehler, die man beim Einsatz von Vererbung machen kann. Vererbung dient nicht zur Code-Wiederverwertung (das kann man über Delegation lösen). Sie muss sich immer an den Prinzipien des objektorientierten Designs halten (is-a-Beziehung).
 
T

Tomate_Salat

Gast
Naja, hab das ein wenig anderster gemeint. Angenommen man hat eine Klasse Säugetier mit der Methode atmen. Darin wird beschrieben, dass die Lunge dazu verwendet wird. Das (Säugetier) jetzt als Interface zu behandeln wäre imho nicht sinnvoll, da alle Säugetiere afaik das auf die gleiche Art und Weiße machen -> Ergo das kommt in die Klasse Säugetier und gilt so erstmal für alle, die auch eines sind (z.b. Hund).

Von der "is-a-Beziehung" bin ich einfach mal ausgegangen, dass es logisch auch so ist.
 
J

JohannisderKaeufer

Gast
Vögel sind keine Säugetiere.

Sie atmen auch mit der Lunge.

Gerade mit Vererbung kriegst du hier Redundanz rein.

Da du bei Vögeln nicht die implementierung von Säugetieren verwenden kannst.

Deshalb Interface für eben diese Beschreibung, Die Beschreibung in eine Eigene Klasse und Delegation.
 

ARadauer

Top Contributor
Dieses Audi VW Beispiel ist ein typisches Beispiel wie man es meiner Meinung nach nicht machen soll....
Das sind unterschiedliche Ausprägungen der Eigenschaften, wenn sie unterschiedliches Verhalten haben, dann würd ich dieses Verhalten kapseln und über Komposition austauschbar machen....
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Zur Vererbung: Wann und wie? Java Basics - Anfänger-Themen 35
KogoroMori21 Wann ist der richtige Zeitpunkt, um sich Hilfe zu suchen? (Bin Informatik-Student) Java Basics - Anfänger-Themen 10
I Logik Zahlungsprozess - Wann Bestellobjekt anlegen? Java Basics - Anfänger-Themen 2
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
berserkerdq2 Java streams, wann nutze ich ::, also 2x Doppelpuntk bei Streams? Java Basics - Anfänger-Themen 5
W Wann und warum hashcode und equals? Java Basics - Anfänger-Themen 14
W Wann Rückgabewerte 0, 1, -1? Java Basics - Anfänger-Themen 27
berserkerdq2 Wann soll ich den Stream schließen, wenn ich das in einer Methode habe? Java Basics - Anfänger-Themen 8
K In andere Zahlensysteme umwandeln, wann klappt immer der Trick mit log? Java Basics - Anfänger-Themen 6
F Wann ist es eine Instanz und wann nicht? Java Basics - Anfänger-Themen 1
C Instanzen, wann muss ich Instanzen erzeugen & wo?) Java Basics - Anfänger-Themen 23
S Wann Methode abstract? Java Basics - Anfänger-Themen 10
S Wann buffer löschen? Java Basics - Anfänger-Themen 5
R Wie überprüfen wann der User online oder offline ist? Java Basics - Anfänger-Themen 5
C Polymorphie Was genau ist Polymorphie und wann genau sollte man es verwenden? Java Basics - Anfänger-Themen 9
I Wann ist Client plattformunabhängig? Java Basics - Anfänger-Themen 22
M Best Practice Wann eine Methode schreiben ? Java Basics - Anfänger-Themen 14
K Warum funktioniert das und wann erden die Objektmethoden nun ausgeführt? Java Basics - Anfänger-Themen 7
IngoF Welches Event kommt wann? Java Basics - Anfänger-Themen 8
M Wann eigene implementierte HashCode Methode zwingend erforderlich? Java Basics - Anfänger-Themen 1
X Wann schreibt man diese Syntax zeichen { } Java Basics - Anfänger-Themen 8
O Wann nutzt man static? Java Basics - Anfänger-Themen 19
C Klassendesign / Wann Interface implementieren und wann Klassen vererben? Java Basics - Anfänger-Themen 3
S Wann existiert eine Instanz (eigene Klasse) Java Basics - Anfänger-Themen 8
M Wann PATH und wann JAVA_HOME in Windows System 7 setzen? Java Basics - Anfänger-Themen 2
M Wann final verwenden? Java Basics - Anfänger-Themen 5
M Wann eine Wrapper Klasse verwenden und wann einen primitiven Datentypen? Java Basics - Anfänger-Themen 8
D Ab wann getter und setter Java Basics - Anfänger-Themen 2
B Erkennen, wann static oder nicht? Java Basics - Anfänger-Themen 7
E wann welche Konstanten verwenden? Java Basics - Anfänger-Themen 7
P Wann Byte-Stream und wann Character-Stream? Java Basics - Anfänger-Themen 11
T Vererbung Wann wird die Methode paint aufgerufen? Java Basics - Anfänger-Themen 4
M Wann statische Methoden/Attribute? Java Basics - Anfänger-Themen 2
vandread Java Wildcards - Wann super wann extends? Java Basics - Anfänger-Themen 2
D Wann genau nutze ich ein solches Interface? Java Basics - Anfänger-Themen 3
K Wann genau brauche ich die Anweisung gleich null? Java Basics - Anfänger-Themen 10
B Wann toString() überschreiben? Java Basics - Anfänger-Themen 21
S OOP Wann Proxies und Interfaces? Java Basics - Anfänger-Themen 3
P Threads Wann läuft es parallel ab ? Java Basics - Anfänger-Themen 4
C Variablen Wann werden Instanzvariablen initalisiert? Java Basics - Anfänger-Themen 10
P Java Stream, wann welche Stream verwenden? Java Basics - Anfänger-Themen 3
T Ab wann ist es ein großes Projekt? Java Basics - Anfänger-Themen 35
N Bessere Performance durch final: wann denn überhaupt? Java Basics - Anfänger-Themen 28
D Wann genau abstrakte Klasse und wann ein Interface verwenden? Java Basics - Anfänger-Themen 4
W Wann nutze ich "import"? Java Basics - Anfänger-Themen 12
A junit test wann verwendet man "was"? Java Basics - Anfänger-Themen 4
H Wann ein Objekt der Programmklasse in main anlegen Java Basics - Anfänger-Themen 2
G Wann ist ein == Vergleich bei Gleitkommazahlen fahrlässig? Java Basics - Anfänger-Themen 8
T Wann for und wann while?? Java Basics - Anfänger-Themen 35
-horn- Wann wird alles NaN erzeugt? Java Basics - Anfänger-Themen 22
S Wann wird eine Klasse geladen? Java Basics - Anfänger-Themen 17
C this - wann verwende ich das? Java Basics - Anfänger-Themen 10
T Threads - Ab wann wirds Kritisch?! Java Basics - Anfänger-Themen 7
M Wann muss man eine Variable mit set-/get-Methoden in eine Bean schreiben? Java Basics - Anfänger-Themen 19
G field public/private wann Java Basics - Anfänger-Themen 11
GambaJo Ab wann neue Klasse erzeugen? Java Basics - Anfänger-Themen 2
G Wann Arrays, wann Collections? Java Basics - Anfänger-Themen 36
GambaJo Wann try.catch nutzen? Java Basics - Anfänger-Themen 11
B objekt wann als final deklarieren? Java Basics - Anfänger-Themen 2
N Wann muss eine Methode - protected sein wann public wann. Java Basics - Anfänger-Themen 5
Y Wann / Wozu inner class Java Basics - Anfänger-Themen 3
K StringBuilder notwendig ab wann? Java Basics - Anfänger-Themen 42
S wann static Funktionen wann nicht Java Basics - Anfänger-Themen 6
N Wann und wie oft finalize Methode verwenden( überschreiben ) Java Basics - Anfänger-Themen 6
Bernasconi Programmierstil / Wann eine neue Datei? Java Basics - Anfänger-Themen 5
M wann, welche schleife Java Basics - Anfänger-Themen 3
M Ab wann ist die Datei sichtbar? Java Basics - Anfänger-Themen 3
G Herausfinden, wann mehrere Threads abgeschlossen sind Java Basics - Anfänger-Themen 3
G Überprüfen wann ein Dokument abläuft? Java Basics - Anfänger-Themen 3
N SAX, StAX, JDOM oder DOM , ab wann welches für XML Java Basics - Anfänger-Themen 14
M Wann ist ein Programm beendet? Java Basics - Anfänger-Themen 6
G Wann am besten getSize() aufrufen? Java Basics - Anfänger-Themen 6
I Festellen wann Methode in anderer Klasse fertig ist Java Basics - Anfänger-Themen 5
M wann statische klassen? Java Basics - Anfänger-Themen 14
M Wann ist initialisieren sinnvoll? Java Basics - Anfänger-Themen 4
B Wann Comparator und wann Comparable Java Basics - Anfänger-Themen 6
R Wann benutzt man << oder >> ? Java Basics - Anfänger-Themen 2
G Klassen: Wann initialisiere ich wo meine Variabeln Java Basics - Anfänger-Themen 6
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
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

Ähnliche Java Themen

Neue Themen


Oben