Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo, ich möchte einen Zoo mit Tieren simulieren (zunächst ohne Grafik). Dazu erstelle ich eine Tierliste (normale einfachverkettete Liste) und fülle diese mit Tieren aus der Klasse Tier, wo Attribute x und y für die Positionen bereitgestellt werden. Nun will ich eine Klasse "Affe" erstellen die von Tier erbt. In der main-Methode sieht das folgendermaßen aus:
Java:
package programme;
import klassen.Affe;
import klassen.TierListe;
public class ZooDemo {
public static void main(String[] args) {
TierListe t = new TierListe();
t.add(10, 10);
Affe a = (Affe) t.getKopf();
System.out.println("X: " + a.getX());
System.out.println("Y: " + a.getY());
}
}
Fehler:
Exception in thread "main" java.lang.ClassCastException: klassen.Tier cannot be cast to klassen.Affe
at programme.ZooDemo.main(ZooDemo.java:11)
Hier die Klasse TierListe:
Java:
package klassen;
public class TierListe {
private Tier kopf;
private TierListe next;
public TierListe getNext() {
return next;
}
public Tier getKopf() {
return kopf;
}
public void del(Tier x) {
if (kopf != null) {
if (kopf == x) {
kopf = next.getKopf();
next = next.getNext();
} else
next.del(x);
}
}
public void add(int x, int y) {
if (kopf == null) {
kopf = new Tier(x, y);
next = new TierListe();
} else
next.add(x, y);
}
}
Hier die Klasse Tier:
Java:
package klassen;
public class Tier {
private int x;
private int y;
public Tier(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public void setX(int x) {
this.x = x;
}
public void setY(int y) {
this.y = y;
}
public void bewegen(int x, int y) {
this.x = x;
this.y = y;
}
}
Und hier die Klasse Affe:
Java:
package klassen;
public class Affe extends Tier {
public Affe(int x, int y) {
super(x, y);
}
}
Du erstellst ja auch ein Tier mit new Tier() und willst es auf Affe casten. Das geht nicht. Du musst bei der add-Methode schon ein Tier übergeben bekommen, welches du erstellen willst.
Außerdem sieht bei dir der Aufbau der Liste nicht richtig an. Liste hat ein Kopfelement, dieses Element zeigt auf ein nächste Element, was wiederum auf ein nächstes Element zeigt.... Deine Implementierung könnte auch gehen, aber hm.
Das Problem wenn ich die Klasse Tier abstract mache ist, dass ich dann keine TierListe mehr machen kann, weil man dann ja von Tier keine Objects erstellen kann!
Danke schonmal, aber wie soll ich dann die add-Methode in der Tierliste verändern, denn der Konstruktor von Tier verlangt 2 int Parameter:
Java:
public void add(Tier x) {
if (kopf == null) {
kopf = new Tier(); // Parameter ??
next = new TierListe();
} else
next.add(x);
}
so würde das ja nicht gehen
und wenn ich dann die Attribute x und y bei Tier rausmache funktioniert die Methode bewegen ja nicht mehr. Und eigentlich macht es ja Sinn diese Methode bei Tier zu haben weil sich alle Tiere bewegen können.
Edit: sorry Denkfehler das erste macht ja gar keinen Sinn
Das macht mehr Sinn:
Java:
public void add(Tier x) {
if (kopf == null) {
kopf = x;
next = new TierListe();
} else
next.add(x);
}