Polymorphie

g_gex

Mitglied
Hallooo,

gegeben ist ein Java-Code, die ich aber leider nicht so ganz verstehe.

Java:
public class Drehung {

    public void dreheLinks() {
        System.out.println("Drehung:dreheLinks");
    }

    public void dreheRechts() {
        System.out.println("Drehung:dreheRechts");
        dreheLinks();
        dreheLinks();
        dreheLinks();

    }

    public void schrittVor() {
        System.out.println("Drehung:schrittVor");

    }

   
   
}

public abstract class Figur extends Drehung{
   
    public abstract void tanze();

   
      void losGehts() {
        System.out.println("Figur:losGehts");
        schrittVor();

    }

    public void dreheRechts() {
        System.out.println("Figur:dreheRechts");
        losGehts();
        super.dreheRechts();

    }
   

}

public class KleineFigur extends Figur {

    void losGehts() {
        System.out.println("KleineFigur:losGehts");
        schrittVor();
    }

    public void schrittVor() {
        System.out.println("KleineFIgur:schrittVor");
        super.schrittVor();
    }

    public void tanze() {
        System.out.println("KleineFigur:tanze");
        dreheRechts();
   

    }

}

Die Ausgabe lautet:
KleineFigur:tanze
Figur:dreheRechts
KleineFigur:losGehts
KleineFIgur:schrittVor
Drehung:schrittVor
Drehung:dreheRechts
Drehung:dreheLinks
Drehung:dreheLinks
Drehung:dreheLinks

Was ich nicht verstehe ist, warum in der 3. Zeile die Methode aus der Klasse Kleinefigur aufgerufen wird? Kann mir das jmd. erklären? Hängt es daran das bei der Methode losgehts() der Zugriffsmodifier fehlt?
 

theo_retiker

Mitglied
Soweit ich das weiß, wird halt immer das aus der untersten Hierarchie Ebene aufgerufen, was in diesem Fall also KleineFigur ist. Existiert die Methode da nicht, wird in der nächst höheren Ebene (Figur) geguckt, usw.
Wo sich das Programm während der Ausführung befindet (in deinem Problemfall ja in der Klasse Figur.dreheRechts() vor dem Aufruf von losGehts()) ist dabei - soweit ich weiß - irrelevant.
Zu beachten ist jedoch: Wenn du in der Klasse Figur z.B. super.dreheRechts() aufrufst, wird von Figur aus gegangen (da sonst Endlosschleife), also Drehung.dreheRechts(). Aber das siehst du ja auch in deinem Log ;)

mfg
Theo
 

Ähnliche Java Themen

Neue Themen


Oben