Vererbung

gast
Gast

Vererbung

Beitrag von gast »

Hi!

Was passiert eigentlich, falls man z.B. eine Unterklasse von Robot erstellt und dann die Methode move() folgendermaßen ùberschreibt:


void move() {

move();
super.move();

}

Danke! :)

Benutzeravatar
Owyn
BSc Spammer
BSc Spammer
Beiträge: 1012
Registriert: 5. Sep 2005 21:53
Wohnort: Rheingau

Re: Vererbung

Beitrag von Owyn »

Das Stichwort lautet hier "Rekursion": Der move()-Aufruf innerhalb der Methode move() ruft die gleiche Methode noch einmal auf, die erste Ausführung wird dabei pausiert.
Das Problem ist, dass das ohne Bedingung passiert, beim zweiten, dritten, vierten etc. Aufruf also wieder - zum super.move() und damit zur Bewegung und zum Ende der Methode kommt die Ausführung nie.
Da nicht unendlich viele Methoden zur gleichen Zeit ausgeführt werden können, wird das Programm nach einer kurzen Weile mit einer "Stack Overflow"-Meldung abgebrochen.

Gruß,
Christian Heinig
All those who believe in psycho-kinesis, raise my hand.
(Steven Wright)

Gast
Gast

Re: Vererbung

Beitrag von Gast »

Code: Alles auswählen

1 class A extends Robot {
2 void write1() {
3 System.out.print("X");
4 }
5 void write2() {
6 System.out.print("Y");
7 }
8 void write() {
9 write1();
10 write2();
11 }
12 }
13
14 class B extends A {
15 void write1() {
16 super.write1();
17 System.out.print("Z");
18 }
19 }
20
21 class C extends B {
22 void write2() {
23 super.write1();
24 System.out.print("W");
25 }
26 }
Die Klasse C erbt ja von B und B von A.
Klasse C Methode void write2() super.write1() bezieht sich das super.write1() jetzt auf die von A ausgeführte Methode oder auf die von B?
Durch ein Super hangelt man sich ja praktisch eine Methode höher in der Klassendefinition oder?

Danke

student_etit167
Gast

Re: Vererbung

Beitrag von student_etit167 »

ja, ich meine das wird ausgeführt:

Code: Alles auswählen

 System.out.print("X");

Gast
Gast

Re: Vererbung

Beitrag von Gast »

Wenn man nun im task einen Roboter wiefolgt erstellt:

C c = new C(1,1,0,East);
c.write();

dann müsste sich meiner meinung nach eine fehlermeldung ergeben, da ja C der statische als auch der dynamische Typ ist und dieser die Methode write() nicht kennt. Jedoch scheint es anscheinend zu funktionieren, wo liegt da das Problem?

...
Gast

Re: Vererbung

Beitrag von ... »

Er kennt die Methode schon, denn er hat sie von der Klasse A geerbt.
Hieß naemlich nicht "Class C extends Robot" sonder "Class C extends B" und "Class B extends A". Und in "A" war sie implementiert ;)

Daniel S.
Mausschubser
Mausschubser
Beiträge: 87
Registriert: 25. Sep 2007 12:28
Wohnort: Mörfelden

Re: Vererbung

Beitrag von Daniel S. »

Zum einen ist es so wie ... schreibt, zum anderen können Sie den Code einfach in KarelJ ausprobieren, abändern, ausprobieren, ...
Mit freundlichen Grüßen
Daniel

Antworten

Zurück zu „Archiv“