also ich gehe ein paar Neuronen und Knoten durch und mache immer AP.prozess.add(this);
Am Ende habe ich, dann eine Liste in der ich genau die Neuronen und Knoten habe die ich brauche. Soweit so gut.
Jetzt will ich aber:
AP.prozess.get(AP.prozess.size()-1)[btw. gibts da ne schönere Moeglichkeit?].addBelohnung(belohnung) aufrufen
Problem:
so wies ist gehts nicht weil Gehirn.addBelohnung() nichts macht
also jetzt zur Frage ^^
gibt es eine Moeglichkeit, Objecte wieder auf ihren Ursprungstyp zurückzucasten? Also, dass alle Objekte aus AP.prozess als <Neuron> und <Knoten> dargestellt werden? Oder muss ich dazu echt zu jedem sagen, wenn .getTyp.equals(das und das){ caste zu}?
Zusatzfrage: Ich dachte wenn ich Methoden in subclassen überschreibe gibt es für endsprechende Objekte nurnoch die neuen Methoden. Zählt das nur wenn das Objekt auch gerade als <Subclass> aufgerufen wird?
Ja das geht mit explizitem Casten.
Da bietet sich der instanceof-Operator an.
Du sprichst Polymorphismus an.
Wenn du eine Klasse Super hast und die Klasse Sub erbt von Super und überschreibt dabei eine Methode, dann ist es egal, in was für einer Variable das Objekt von Sub steht. Es wird immer dir entsprechende Implementierung aufgerufen. Wäre auch schlimm, wenn nicht.
also muss ich immer abfragen if(Gehirn instanceof Neuron){ caste zu Neuron}else if(gehirn instanceof Knoten){ caste zu Knoten}...? Gibts da keine Moeglichkeit alle Objecte aus AP.prozess als ihren Ursprungstyp aufzurufen?
Du sprichst Polymorphismus an.
Wenn du eine Klasse Super hast und die Klasse Sub erbt von Super und überschreibt dabei eine Methode, dann ist es egal, in was für einer Variable das Objekt von Sub steht. Es wird immer dir entsprechende Implementierung aufgerufen. Wäre auch schlimm, wenn nicht.
Ja also die Zusatzfrage war genau darauf gerichtet.^^
Ja also ist perfekt die Antwort danke, hatte bei mir n Fehler, es wird die Methode der Subclass aufgerufen also allles so wies sein soll.
Du könntest mit mehreren Listen arbeiten oder den Methodennamen allgemeiner formulieren. In Spielen zum Beispiel werden manchmal Objekte in einer Liste zusammengefasst. Diese Objekte implementieren das Interface Renderable und so kann einfach list.get(i).render() aufgerufen werden (stark vereinfacht ausgedrückt).
Dann müssen da noch andere Fehler drin sein. Zum Beispiel eine Implementierung von System.out.println() erwartet ein Objekt vom Typ Object. Und es wird, sofern vorhanden, immer die Implementierung von toString() aus der betreffenden Klasse aufgerufen.
Lass dir mal in addBelohnung() die Größe der Liste ausgeben.