Vererbung

gast
Gast

Vererbung

Beitrag von gast » 7. Mär 2012 10:54

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 » 7. Mär 2012 11:41

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 » 9. Mär 2012 12:09

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 » 9. Mär 2012 12:47

ja, ich meine das wird ausgeführt:

Code: Alles auswählen

 System.out.print("X");

Gast
Gast

Re: Vererbung

Beitrag von Gast » 9. Mär 2012 17:58

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 ... » 9. Mär 2012 18:11

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. » 9. Mär 2012 18:35

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“