# Polymorphie und Vererbung



## stephanie (28. Dez 2010)

Hallo Leute,

ich habe viele über Vererbung und Polymorphismus gelesen. Ich habe aber nicht verstanden, woran liegen die Unterschiede zwischen beiden? Es sieht mir so aus, beide sind einfach vererbung.

Danke im voraus für die Erklärungen.


----------



## Final_Striker (28. Dez 2010)

schau mal hier:
Vererbung und Polymorphismus


----------



## muemmel_0811 (28. Dez 2010)

Stell Dir vor, Du hast eine Superklasse Tier. Diese vererbt ihre Instanzvariablen (bspw. größe und gewicht) und Methoden (gibLaut()) an die Klassen Hund und Katze. Hund und Katze erben also von Tier.

```
public class Tier() {
int gewicht, größe;
public void gibtLaut() {
// irgendein Code, der Geräusche erzeugt
}
}
public class Hund extends Tier {
int gewicht, größe;
public void gibtLaut() {
// irgendein Code, der hundespezifische Geräusche erzeugt
}
}
public class Katze extends Tier {
int gewicht, größe;
public void gibtLaut() {
// irgendein Code, der katzenpezifische Geräusche erzeugt
}
}
```
Nun hast Du noch eine Klasse Tierfuetterung mit der Methode gibFutter(Tier t). Und an diese Methode kannst Du nun entweder einen Hund oder eine Katze übergeben, weil ja beide von der Klasse Tier geerbt haben (bzw. diese Klasse Tier erweitert haben), also so:

```
class Tierfuetterung {
public void gibFutter(Tier t) {
System.out.print("Fütter das Tier: " + t);
}
class Zoo {
public static void main(String[] args) {
Tierfuetterung t = new Tierfuetterung();
Hund h = new Hund();
Katze k = new Katze();
t.gibFutter(h);
t.gibFutter(k);
}
```
Und das ist Polymorphie. 

Grüße,
muemmel_0811


----------



## stephanie (28. Dez 2010)

Also, kann ich mal so denken: mindestens bei der Poly. gibt es kein "extends" und es muss auch nicht vorhanden. Bei der Poly. kann eine Klasse von irgendeinen Klasse eine Methode überschreiben. 
richtig??


----------



## gman (28. Dez 2010)

Hmm, ich glaube du verrennst dich da ein bischen. Es gibt nicht Vererbung und/oder Polymorphie (als Konstrukt von Java), 
sondern Polymorphie wird erst durch Vererbung ermöglicht. Genauer: Vererbung ("extends") ist eine Eigenschaft der 
Programmiersprache Java, und damit lässt sich Polymorphie erreichen.

Lies dir den Link von Final_Striker ruhig noch ein paarmal durch.


----------



## kossy (28. Dez 2010)

gman hat gesagt.:


> Hmm, ich glaube du verrennst dich da ein bischen. Es gibt nicht Vererbung und/oder Polymorphie (als Konstrukt von Java),
> sondern Polymorphie wird erst durch Vererbung ermöglicht. Genauer: Vererbung ("extends") ist eine Eigenschaft der
> Programmiersprache Java, und damit lässt sich Polymorphie erreichen.



Wobei sich die Polymorphie aber auch durch Interfaces erreichen lässt, man braucht nicht zwingend Subklassen bzw. "extend". Mir fallen als Praxisbeispiele spontan das State-Pattern oder Strategy-Pattern ein. Also es geht sowohl mittels Vererbung, als auch mithilfe von Interfaces.


----------



## muemmel_0811 (28. Dez 2010)

stephanie hat gesagt.:


> Also, kann ich mal so denken: mindestens bei der Poly. gibt es kein "extends" und es muss auch nicht vorhanden. Bei der Poly. kann eine Klasse von irgendeinen Klasse eine Methode überschreiben. richtig??


Nein. Die Code-Brocken, die ich auf zweimal aufgeteilt habe, gehören zusammen:

```
public class Tier() {
int gewicht, größe;
public void gibtLaut() {
// irgendein Code, der Geräusche erzeugt
}
}
public class Hund extends Tier {
int gewicht, größe;
public void gibtLaut() {
// irgendein Code, der hundespezifische Geräusche erzeugt
}
}
public class Katze extends Tier {
int gewicht, größe;
public void gibtLaut() {
// irgendein Code, der katzenpezifische Geräusche erzeugt
}
}
class Tierfuetterung {
public void gibFutter(Tier t) {
System.out.println("Fütter das Tier: " + t.getClass());
}
class Zoo {
public static void main(String[] args) {
Tierfuetterung t = new Tierfuetterung();
Hund h = new Hund();
Katze k = new Katze();
t.gibFutter(h);
t.gibFutter(k);
}
```
Meine beiden Vorredner haben es bereits gesagt: es gibt nicht entweder oder, sondern beides zusammen. Für den Anfang solltest Du Dir vielleicht merken, dass ohne Vererbung keine Polymorphie möglich ist (@kessy: uns Anfänger verwirrt man mit solchen Aussagen mehr, als dass es nützt ). Polymorphie funktioniert dann, wenn zwei Objekte miteinander verwandt sind und das funktioniert eben über die Vererbung von Ober- zur Unterklasse. Und um bei meinem Beispiel zu bleiben: Tier ist die Oberklasse und Hund oder Katze sind Unterklassen von Tier.

Versuch doch mal die 5 Klassen zu erstellen und schau Dir an was passiert. Vielleicht lichtet sich der Nebel dann ja etwas. Ach ja, evtl. sind ein paar } verloren gegangen...

Grüße
muemmel_0811


----------

