Vererbung auf Methode einer abgeleiteten Klassezu greifen, die nicht in allen abgeleiteten existiert

losgehts

Mitglied
Hallo,

ich habe eine abstrakte Klasse (Baume) und zwei abgeleitete Klassen (Ahorn, Zeder).
In einer ArrayList<Baume> habe ich sowohl Zedern, als auch Ahorne. Nun möchte von allen Ahornen eine Funktion ausführen, die in der Klasse Zedern nicht vorkommt.
Meine bisherigen versuche:
Java:
public class Test {

    public static void main(String[] args) {
        ArrayList<Baume> meineBaume = new ArrayList<Baume>();
        meineBaume.add(new Ahorn());
        meineBaume.add(new Ahorn());
        meineBaume.add(new Zeder());
        
        // Ziel: Schleife über eine ArrayList<baume>, und eine Methode ausführen,
        // die nur in manchen Unterklassen von "Baume" existiert
        for (int i = 0; i < meineBaume.size(); i++) {
            if (meineBaume.get(i) instanceof Ahorn){
                meineBaume.schuettelDenAhorn(); // The method schuettelDenAhorn() is undefined for type Arraylist<Baume>
            }
        }
    }
}



public abstract class Baume {

}



public class Zeder extends Baume {

}



public class Ahorn extends Baume{
    public void schuettelDenAhorn(){
        System.out.println("geschüttelt");
    }
}
Gibt es eine Möglichkeit, eine solche Schleife zu formulieren, oder ist die einzige Lösung, dass ich die Methode "schuettelDenAhorn" der Klasse Baume hinzufüge?
Meiner Meinung nach macht sie da überhaupt keinen Sinn.

Oder kann ich vielleicht eine Schleife formulieren, die ausschließlich über die Ahorne der ArrayList<Baume> iteriert?

Vielen Dank für Eure Unterstützung,
Ulrich
 
Dein erster Fehler ist, dass du die Methode auf der Liste und nicht auf dem Element aufrufst.

Dein eigentliches Problem löst man dann mit einem Cast. Hier der Runpf der for-Schleife:
Java:
Baume baum = meineBaume.get(i);
if (baum instanceof Ahorn){
   Ahorn ahorn = (Ahorn) baum;
   ahorn.schuettelDenAhorn(); 
}
 
Hallo,
@ JStein52,
nun, weil es eben (zumindest bei mir) nicht geht, habe ich dir auch die Fehlermeldung dazu geschrieben ;-).. Trotzem Danke!

@ Dompteur,
vielen Dank! Weshalb mir beim Code posten das get(i) verloren gegangen ist, weiß ich auch nicht...

Vielen Dank für deine Hilfe mit dem Cast. Jetzt habe ich einen Begriff zum suchen im Netz, und die funktionierende Lösung hast du mir auch noch dazu geliefert! Cool!

Klasse, das hat mir echt weiter geholfen!

Viele Grüße,
Ulrich
 

Zurück
Oben