Seite 1 von 1

[Aufgabe 8.3] Frage zur Polymorphie

Verfasst: 9. Jan 2008 08:57
von Krümelmonster
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.

Re: [Aufgabe 8.3] Frage zur Polymorphie

Verfasst: 9. Jan 2008 11:06
von Stumpf.Alex
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.

Re: [Aufgabe 8.3] Frage zur Polymorphie

Verfasst: 9. Jan 2008 13:12
von Krümelmonster
Die Methode run() innerhalb von Ant2 wird aber nur benutzt,
wenn sowohl die Methode in Ant als auch in Ant public sind.

Re: [Aufgabe 8.3] Frage zur Polymorphie

Verfasst: 9. Jan 2008 16:53
von taufrisch

Re: [Aufgabe 8.3] Frage zur Polymorphie

Verfasst: 9. Jan 2008 19:21
von Krümelmonster
Danke, die Antwort war zielführend.