Problem mit Polymorphie
-
Ich erklärs mal ein bisschen allgemeiner,und spezifisch für meien Aufgabe,sonst müsste man sich da wohl wieder rein denken...
Ich habe eine klassische ElternKlasse und eine KindsKlasse.
Die KindsKlasse ist natürlich ein wenig erweitert,und Methoden der ElternKlasse werden überschrieben...
Dann habe ich eine Klasse PetriSchale, wo diverse Dinge angestellt werden.
U.a. gibt es einen Vector
protected Vector population = new Vector();
ein temoräres Objekt
ElternKlasse tmpElternKlasse = new ElternKlasse();
eine Hauptmethode
public void startePopulation() {
wo gefüllt wird;
for (int i = 0; i < 5; i++) { this.add(new ElternKlasse()); }
und später sowas passiert,um das Objekt zu bekommen:
tmpElternKlasse = (Elternklasse) population.get(i);
Soweit klappt ja alles, nur, wenn ich meinen Vector in der Füllmethode mit
KindsKlassen-Objekte fülle, dann wendet er hier:
tmpElternKlasse = (Elternklasse) population.get(i);
mit z.b.
tmoElternKlasse.MethodeX();
trotzdem die Methode der ElternKlasse, und nicht die überschriebene an... warum ?
-
Das ist ja seltsam Leider wirst du kaum geholfen ohne diene Quelltexte zu sehen.
-
Müsste aber das wichtigste dastehen...wenn das ganze prog dasteht,dann sähe da keiner mehr durch...
-
import java.util.Vector; public class Test { public static void main(String args[]){ Other other = new Other(); for(int i = 0; i < 5; ++i) other.add(new Child()); other.test(); } } class Other{ private Vector population = new Vector(); public void add(Base b){ population.add(b); } public void test (){ for(int i = 0; i < population.size(); ++i){ Base b = (Base)population.get(i); b.f(); } } } class Base{ public void f(){ System.out.println("I'm Base"); } } class Child extends Base{ public void f(){ System.out.println("I'm child"); } }
Schau mal die Ergebnisse an, die die Main-Methode ausgibt.
Hoffentlich wirst du jetzt einverstanden, dass Ich den Queltext deiner Klasse brauche um die Begründung für das Verhalten deines Beispiels zu finden.
-
Hat sich geklärt, es ging eigentlich schon,nur hatte ich nen anderen kleinen fehler noch drin...
Ein MethodenKopf den ich Überschrieb hatte nen anderen Parameter,und die müssen ja genau gleich heissen....