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

Informatiker Board » Themengebiete » Praktische Informatik » Polymorphie » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Polymorphie
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
gg_
Mitglied


Dabei seit: 06.12.2014
Beiträge: 30

Polymorphie Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
18.07.2015 07:38 gg_ ist offline Beiträge von gg_ suchen Nehmen Sie gg_ in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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

__________________
Syntax Highlighting fürs Board (Link)
18.07.2015 07:43 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
gg_
Mitglied


Dabei seit: 06.12.2014
Beiträge: 30

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

code:
1:
(new KleineFigur()).tanze();
18.07.2015 08:03 gg_ ist offline Beiträge von gg_ suchen Nehmen Sie gg_ in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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

__________________
Syntax Highlighting fürs Board (Link)
18.07.2015 08:50 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
gg_
Mitglied


Dabei seit: 06.12.2014
Beiträge: 30

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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?
18.07.2015 08:56 gg_ ist offline Beiträge von gg_ suchen Nehmen Sie gg_ in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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"

__________________
Syntax Highlighting fürs Board (Link)
18.07.2015 09:50 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
gg_
Mitglied


Dabei seit: 06.12.2014
Beiträge: 30

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

achh jetzt verstehe ich es DANKE
18.07.2015 10:02 gg_ ist offline Beiträge von gg_ suchen Nehmen Sie gg_ in Ihre Freundesliste auf
gg_
Mitglied


Dabei seit: 06.12.2014
Beiträge: 30

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
18.07.2015 14:40 gg_ ist offline Beiträge von gg_ suchen Nehmen Sie gg_ in Ihre Freundesliste auf
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
18.07.2015 18:14 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Polymorphie