Vererbung Prinzip der Ersetzbarkeit-Sinn?

H

HaudiGaudi

Gast
Hallo liebes Forum,


Java:
public class Tier{
.
.
.
}

Java:
public class Hund extends Tier{
.
.
.
.
}
ich verstehe zwar dass nachfolgendes möglich ist, aber der Sinn davon bleibt mir rästelhaft. Kann mir das jemand erklären?

Java:
Tier tier = new Hund();
 

njans

Top Contributor
Nun der Vorteil hierbei ist, durch die Polymorphie bedingt, Codeteile leicht austauschen kannst.
Java:
List<String> liste = new ArrayList<String>();
List<String> liste = new LinkedList<String>();
Weiterer Vorteil ist, dass alle Methoden des deklarierten Types vorhanden sind. So kannst du, in deinem Beispiel, alle Methoden aufrufen, die du an Tier aufrufen kannst. Nehmen wir mal an, du das Tier ist ein Haustier und du willst dann wissen, was das Tier frisst. Wenn du weißt, dass da ein Objekt existiert, dass von Tier erbt (Hund), dann kannst du ja sichergehen, dass der Hund alle Methoden hat, die auch Tier hat (Vererbung). Wenn du also auf der Variable Tier die Methode "gibGeeigneteNahrung()" hättest, dann würde diese dann eben zurückgeben, was der Hund fressen würde.
Wenn du keine Vererbung nutzen könntest, dann müsstest du für jeden Tiertyp (Hund, Katze, Schlange,...) jeweils eine Variable haben und JEDE überprüfen, ob dort ein Tier vorhanden ist.

Vererbung nutzt man eben genau dann, wenn man a) etwas aus der Welt modellieren will oder wenn es es eben ein "Grundgerüst" gibt, das andere Klassen auch haben müssen z.B. alle Tiere müssen eben haben: Gesundheitszustand, Geschwindigkeit, Alter, etc und Methoden wie #gibGeeigneteNahrung, istMüde, etc.
 
H

HaudiGaudi

Gast
Aber ist es dann nicht egal ob ich
Java:
Tier und = new Hund();
oder
Java:
Hund hund = new Hund()
schreibe?
 

Sesostris

Aktives Mitglied
Angenommen du hast eine Tierhandlung mit zehn Käfigen, wobei jeder Käfig Platz für ein
Code:
Tier
bietet.
Java:
Tier[] kaefig = new Tier[10];

Jetzt kannst du in den ersten Käfig einen Hund, in den zweiten eine Katze usw. unterbringen.
Java:
kaefig[0] = new Hund();
kaefig[1] = new Katze();

Würde jeder Käfig von vornherein auf ein bestimmtes Tier fixiert sein, wärst du lange nicht so flexibel.
 

njans

Top Contributor
Nein: Denn wenn du
Java:
Hund hund = new Hund();
schreibst, dann kann die Variable Hund kein Objekt des types Katze mehr aufnehmen.
Du hättest zwar alle Methoden von Tier und dazu noch die, die Hund zusätzlich anbietet, aber da keine direkte, lineare Verebungsherachie zwischen Katze und Hund besteht, kannst du nicht sicher sagen, dass Katze und Hund die selben Methoden haben.
 
H

HaudiGaudi

Gast
Angenommen du hast eine Tierhandlung mit zehn Käfigen, wobei jeder Käfig Platz für ein
Code:
Tier
bietet.
Java:
Tier[] kaefig = new Tier[10];

Jetzt kannst du in den ersten Käfig einen Hund, in den zweiten eine Katze usw. unterbringen.
Java:
kaefig[0] = new Hund();
kaefig[1] = new Katze();

Würde jeder Käfig von vornherein auf ein bestimmtes Tier fixiert sein, wärst du lange nicht so flexibel.


Ich glaube ich verstehe so langsam was ihr meint, aber das Beispiel würde locker nicht den ist-ein-Test bestehen:D(nur so am Rande).
Kern des ganzen ist also eine erhöhte Flexibilität.

MfG
 

Ullenboom

Bekanntes Mitglied
Mit

Tier tier = new Hund();

drückst du aus, das dich die Eigenschaften vom Hund (bellt wie laut?, sabbert wie viel, ...) nicht interessieren, sondern nur die Eigenschaften, die es als Tier hat (Gewicht, haarig, ...)

Man nimmt immer den kleinsten nötigen Typ, natürlich schreibst du

Hund tier = new Hund();

wenn du brauchst, was ein Hund eben vom allgemeinen Tier unterscheidet.
 
G

Gonzo17

Gast
Man nimmt immer den kleinsten nötigen Typ, natürlich schreibst du

Hund tier = new Hund();

wenn du brauchst, was ein Hund eben vom allgemeinen Tier unterscheidet.

Kleine Anmerkung noch dazu. Damit es nicht zu Verwirrungen kommt, würde ich an der Stelle den Namen der Variable auch entsprechend setzen, zB so:

Hund wauwau = new Hund();

Sollte die Variable tatsächlich
Code:
tier
heißen, könnte es zu unnötigen Verwirrungen kommen, wenn man irgendwo im Code nicht genau schaut, von welchem Typ diese Variable ist.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Liskov Prinzip Java Basics - Anfänger-Themen 3
L OOP Interface Prinzip? Java Basics - Anfänger-Themen 6
I iCal und auf Homepage einbinden - Prinzip Java Basics - Anfänger-Themen 2
S DRY Prinzip - Hilfe! Java Basics - Anfänger-Themen 5
B Bei Swing weg vom North-West-South-East-Prinzip Java Basics - Anfänger-Themen 2
S MVC Prinzip - update() ? Java Basics - Anfänger-Themen 2
C OOP Model View Controller - Prinzip Java Basics - Anfänger-Themen 6
T Verstehe Bufferreader prinzip nicht Java Basics - Anfänger-Themen 3
K Frage zum Model View Controller Prinzip Java Basics - Anfänger-Themen 6
M Prinzip der Kapselung - Wie Aufruf der Methode? Java Basics - Anfänger-Themen 2
E Frage zum MVC-Prinzip Java Basics - Anfänger-Themen 2
L Callback-Prinzip Java Basics - Anfänger-Themen 8
M Frage zum MVC Prinzip Java Basics - Anfänger-Themen 6
D Interfaces von Interfaces macht das noch Sinn? Java Basics - Anfänger-Themen 21
F Hat es noch einen Sinn, alte Versionen zu lernen Java Basics - Anfänger-Themen 45
berserkerdq2 Wo ist der SInn, dass man den Stream, den ich zum Schreiben nutze, outputstream nenne? Java Basics - Anfänger-Themen 5
H Sinn von Interfaces Java Basics - Anfänger-Themen 21
W Sinn eines Singleton ? Java Basics - Anfänger-Themen 14
R getUserProperties() macht für mich keinen Sinn Java Basics - Anfänger-Themen 8
E Sinn: final in Parameterliste verwenden Java Basics - Anfänger-Themen 2
B Sinn von Lambdas? Java Basics - Anfänger-Themen 16
5 Welchen Sinn hat ein Runnable Java Basics - Anfänger-Themen 6
P OOP Sinn von abstrakten Klassen Java Basics - Anfänger-Themen 2
M Kapselung Datenkapselung Sinn direkter Zugriff? Java Basics - Anfänger-Themen 1
B Der Sinn von Arrays Java Basics - Anfänger-Themen 2
Q Container sinn? Java Basics - Anfänger-Themen 3
S string index out of range - es ergibt keinen Sinn Java Basics - Anfänger-Themen 6
C Sinn eines Interfaces? Java Basics - Anfänger-Themen 4
J Sinn/Nutzen von Scanner Java Basics - Anfänger-Themen 23
B Sinn von Reflections Java Basics - Anfänger-Themen 10
F Sinn der SuppressWarnings("unused")-Annotation Java Basics - Anfänger-Themen 5
R Sinn des programmes Java Basics - Anfänger-Themen 10
W Sinn von Konstruktorsyntax und finalize Java Basics - Anfänger-Themen 14
J Worin besteht der Sinn und Anwendungsbereich von Dreidimensionalen Arrays? Java Basics - Anfänger-Themen 11
J Datentypen Was ist der Sinn vom Datentyp "char" ? Java Basics - Anfänger-Themen 11
T Sinn von finally? Java Basics - Anfänger-Themen 3
M Variablen Zinseszinsberechnung - Variable ergibt keinen Sinn Java Basics - Anfänger-Themen 15
A Klassen Sinn des Konstruktors Java Basics - Anfänger-Themen 12
P Sinn des Security Managers Java Basics - Anfänger-Themen 2
J Welchen Sinn haben abstrakte Methoden? Java Basics - Anfänger-Themen 4
D Sinn von Jar Dateien Java Basics - Anfänger-Themen 5
D Sinn von Interfaces - Wozu? Java Basics - Anfänger-Themen 9
K Sinn eigener Exceptions Java Basics - Anfänger-Themen 11
Luk10 Sinn von Instanzierung ohne Referenz Java Basics - Anfänger-Themen 7
hdi Sinn von RuntimeExceptions? Java Basics - Anfänger-Themen 90
Developer_X NullPointer Exception ohne Sinn Java Basics - Anfänger-Themen 19
L Sinn hinter Generic? Java Basics - Anfänger-Themen 5
M Der Java Schlüsselwort null; ?Welche Anweisung und Sinn? Java Basics - Anfänger-Themen 12
A Macht es Sinn Arraylisten mit Gettern zu übergeben? Java Basics - Anfänger-Themen 19
M Variable überwachen und Sinn eines Threads Java Basics - Anfänger-Themen 7
G Sinn vo OOP Java Basics - Anfänger-Themen 5
P Unterschied zwischen Interface und Vererbung und Sinn? Java Basics - Anfänger-Themen 5
G sinn von JList Java Basics - Anfänger-Themen 6
K Sinn von Interfaces Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben