zzz.test

Diskutiere zzz.test im Java Basics - Anfänger-Themen Forum; Hallo, ich hänge gerade an einem Code fest, der mir nicht so ganz klar ist. Bin absoluter Anfänger. Ich soll erklären warum bei der Ausführung...

  1. baker333
    baker333 Mitglied
    Hallo,

    ich hänge gerade an einem Code fest, der mir nicht so ganz klar ist. Bin absoluter Anfänger.
    Ich soll erklären warum bei der Ausführung der Methode ZZZ.test() folgenden Code die Ausgabe ZZZYYY erscheint:

    Code (Java):
    public class ZZZ {
              public void a(Object x) {
                        System.out.print("ZZZ");
               }
             public static void test () {
                        ZZZ z = new YYY();
                        z.a("Hallo");
                        YYY y = newYYY();
                        y.a("Hallo");
             }
    }
    class YYY extends ZZZ {
           public void a(String x) {
                   System.out.print("YYY);
           }
    }
    Also mir ist klar, dass static immer ausgeführt wird. Aber ich verstehe einfach nicht warum erst ZZZ ausgeführt wird. Außerdem was genau bedeutet Object x? Ich habe die Klasse Object kennengelernt.

    LG
     
    Zuletzt von einem Moderator bearbeitet: 17. Nov. 2018
  2. Vielleicht hilft dir dieser Kurs hier weiter.
  3. mihe7
    mihe7 Bekanntes Mitglied
    Bitte Code-Tags verwenden: [code=Java]Dein Code[/code]
    Da ist Dir aber was falsches klar.

    Warum nicht?

    Parameter x vom Typ Object. Object ist die Mutter aller Klassen in Java.
     
  4. baker333
    baker333 Mitglied
    D.h. weil Object wird zuerst ZZZ gezeigt?
     
  5. mihe7
    mihe7 Bekanntes Mitglied
    Die Methoden a(Object x) und a(String x) sind zwei verschiedene.

    In ZZZ existiert eine Methode a(Object x). Du deklarierst in test() die Variable z vom Typ ZZZ. Für z existiert also nur die Methode a(Object x) und die wird ausgeführt, wenn Du einen String übergibst, weil String eben auch ein Object ist (Object Mutter aller Klassen).

    y dagegen deklarierst Du vom Typ YYY. Dort existieren nun zwei Methoden: einmal a(Object x) und einmal a(String x). Hier wird die Methode genommen, die "am besten" passt.
     
  6. baker333
    baker333 Mitglied
    okay, vielen Dank, habe mal wieder viel zu kompliziert gedacht :p
     
  7. mihe7
    mihe7 Bekanntes Mitglied
    Es geht um überschreiben != überladen
     
  8. baker333
    baker333 Mitglied
    Warum wird die Signatur a(Object) nicht von der Methode a in YYY überschrieben?
     
  9. mihe7
    mihe7 Bekanntes Mitglied
    Nehmen wir mal an, Du weist einer Variablen vom Typ ZZZ ein Objekt zu. Dann muss dieses Objekt die Methode a(Object) anbieten. Würde die Methode a(Object) durch a(String) überschrieben, wäre das nicht mehr der Fall. Beispiel:
    Code (Java):

    ZZZ z = new YYY();
    z.a(new Object());
     
     
  10. baker333
    baker333 Mitglied
    Würde sich denn irgendwas ändern, wenn die Methode test() keine Klassenmethode wäre?
     
  11. mrBrown
    mrBrown Super-Moderator Mitarbeiter
    Nein, die Methode test ist dabei irrelevant, wichtig sind nur die Aufrufe der anderen Methoden
     
  12. Wenn du Java lernen möchtest, empfehlen wir dir diesen Kurs hier
Passende Stellenanzeigen aus deiner Region:





Thema: zzz.test