[Aufgabe 8.3] Frage zur Polymorphie

Benutzeravatar
Krümelmonster
Geek
Geek
Beiträge: 767
Registriert: 17. Okt 2007 13:58
Wohnort: Jossgrund

[Aufgabe 8.3] Frage zur Polymorphie

Beitrag von Krümelmonster » 9. Jan 2008 08:57

Hallo,
in der Aufgabe 3 in Übung 8 sind Ants gegeben und es wurde
gefragt, welche in das Ziel finden.

Ich gebe erst einmal die Klassen an:

Ant:

Code: Alles auswählen

public abstract class Ant extends RightTurner {
	Ant(int street, int avenue, int beepers, direction dir) {
		super(street, avenue, beepers, dir);
	}

	public abstract void comeHome();

	private void run() {
		super.move();
		super.move();
	}

	public void turnRight() {
		run();
		super.turnRight();
	}
}
Ant2:

Code: Alles auswählen

public class Ant2 extends Ant {
	Ant2(int street, int avenue, int beepers, direction dir) {
		super(street, avenue, beepers, dir);
	}

	private void run() {
		super.move();
		super.move();
		super.move();
		super.move();
	}

	public void comeHome() {
		turnRight();
		super.move();
		turnLeft();
		turnRight();
		super.move();
		turnLeft();
	}
}
RightTurner:

Code: Alles auswählen

public class RightTurner extends Robot {
	RightTurner(int street, int avenue, int beepers, direction dir) {
		super(street, avenue, beepers, dir);
	}

	public void turnRight() {
		for(int i=0;i<3;i++) super.turnLeft();
	}
}
QueenAnt:

Code: Alles auswählen

public class QueenAnt extends Robot {
    QueenAnt(int street, int avenue, int beepers, direction dir) {
		super(street, avenue, beepers, dir);
	}

	Ant ant2 = new Ant2(2,3,0,Robot.North); 
    public void bringEmHome() {
    	ant2.comeHome();
    }

    public static void main(String[] args) {
    	World.setDelay(10);
    	World.setAvenues(17);
    	World.setStreets(10);
    	
    	QueenAnt elisabeth = new QueenAnt(10,4,100,Robot.South);
    	elisabeth.move() ;
    	elisabeth.bringEmHome();
    }
}
Nun ist meine Frage:
Wieso wird beim Aufruf von run() in der Klasse Ant die private Methode run() in der Klasse Ant()
benutzt und nicht die von Ant2? (Es zeigt sich ja schin daher, dass sich Eclipse beschwert, dass die private
Methode run() in Ant2 nie benutzt wird.)

Da ant2 den dynamischen Typ Ant2 hat, müsste doch eigentlich auch beim Aufruf von run() zuerst
in der Klasse Ant2 nach der Implementierung gesucht werden, die ja auch vorhanden ist.
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Re: [Aufgabe 8.3] Frage zur Polymorphie

Beitrag von Stumpf.Alex » 9. Jan 2008 11:06

Wieso wird beim Aufruf von run() in der Klasse Ant die private Methode run() in der Klasse Ant()
benutzt und nicht die von Ant2?
Wieso sollte sie? Ant ist doch die Vaterklasse von Ant2 und hat keine Ahnung von der Implementierung von Ant2.

Das Problem, dass die run() der Ant2-Klasse nie benutzt wird, liegt daran, dass diese Methode nur in der Klasse wo sie definiert ist, sichtbar ist (wegen pivate Deklaration). Aber in der Klasse Ant2 wird nie ein run() benutzt und deshalb meckert Eclipse.

Benutzeravatar
Krümelmonster
Geek
Geek
Beiträge: 767
Registriert: 17. Okt 2007 13:58
Wohnort: Jossgrund

Re: [Aufgabe 8.3] Frage zur Polymorphie

Beitrag von Krümelmonster » 9. Jan 2008 13:12

Die Methode run() innerhalb von Ant2 wird aber nur benutzt,
wenn sowohl die Methode in Ant als auch in Ant public sind.
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

Benutzeravatar
taufrisch
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 107
Registriert: 30. Sep 2007 02:42
Wohnort: 127.0.0.1

Re: [Aufgabe 8.3] Frage zur Polymorphie

Beitrag von taufrisch » 9. Jan 2008 16:53

Premature optimization is the root of all evil.

Don't anthropomorphize computers: They hate that.

Benutzeravatar
Krümelmonster
Geek
Geek
Beiträge: 767
Registriert: 17. Okt 2007 13:58
Wohnort: Jossgrund

Re: [Aufgabe 8.3] Frage zur Polymorphie

Beitrag von Krümelmonster » 9. Jan 2008 19:21

Danke, die Antwort war zielführend.
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

Antworten

Zurück zu „Archiv“