Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Polymorphie » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 9 Beiträge
as_string

super bezieht sich immer auf dem direkten Vater. Sonst wäre es in Java ja immer Object.
Außerdem sollst Du ja gar nicht zwingend wissen müssen, von welcher Klasse eine andere Klasse erbt, die Du erweitern willst. Deshalb immer nur eine drüber, die Du auch gerade erweiterst.

Gruß
Marco
gg_

mir ist etwas noch unklar:
in der Klasse KleineFigur ist ein Methodenaufruf mit super. Wird dann die Methode aus der Figur aufgerufen oder aus der Klasse Drehung, die Drehung ist ja die Oberklasse von allen
gg_

achh jetzt verstehe ich es DANKE
eulerscheZahl

Weil du immer noch ein Objekt der Klasse KleineFigur als aufrufende Klasse hast.
Stelle dir das am besten so vor: wenn du die Methode nicht überschreibst, wird sie einfach aus der Basisklasse genommen und hineinkopiert.

Ändern wir die Methode Figur.dreheRechts etwas ab:
code:
1:
2:
3:
4:
5:
public void dreheRechts() {
	System.out.println("Figur:dreheRechts -> " + getClass().getName());
	losGehts();
	super.dreheRechts();
}

mit getClass().getName() kriegst du den Namen der aufrufenden Klasse
Ausgabe: "Figur:dreheRechts -> KleineFigur"
gg_

Ich verstehe es wirklich nicht so ganz, es wird zuerst die Methode dreheRechts() aus der Klasse Figur aufgerufen, warum wir denn dort (in der Klasse Figur) nicht die Methode losGehts() aufgerufen?
eulerscheZahl

Du hast ein Objekt vom Typ KleineFigur.
Wenn es da eine Methode losGehts gibt, wird sie auch verwendet.
gg_

code:
1:
(new KleineFigur()).tanze();
eulerscheZahl

Es wäre hilfreich den Code zu sehen, der für die Ausgabe verantwortlich ist.
gg_ Polymorphie

Meine Frage:
Guten morgen,
ich habe ein Java-Code, die ich aber leider nicht so ganz verstehe.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
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();
   

    }

}


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?


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