wie überwiegendes Arbeiten in dem folgenden Code?

stimmen
1

Sehen Sie den folgenden Code in Java:

public class Superclass {    
    public void printMethod() {
        System.out.println(Printed in Superclass.);
    }
}

Hier ist eine Unterklasse, die so genannte Unterklasse, die sie überschreibt print ():

public class Subclass extends Superclass {    
    // overrides printMethod in Superclass
    public void printMethod() {
        super.printMethod();
        System.out.println(Printed in Subclass);
    }
    public static void main(String[] args) {
        Subclass s = new Subclass();
        s.printMethod();    
    }
}

Die Ausgabe, die erhalten ist die folgende:

Printed in Superclass
Printed in Subclass

Wenn die Unterklasse überschrieben wird , warum Super printlnAnzeige noch auf dem Bildschirm? Es ist nicht nur annehmen , um den Inhalt des Verfahrens auf der Unterklasse angezeigt werden ?

Warum ist Super nicht in dem folgenden Code aufgerufen wird, wenn die Methode überschrieben wird?

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
Veröffentlicht am 08/01/2014 um 22:13
quelle vom benutzer
In anderen Sprachen...                            


5 antworten

stimmen
2

1 Aufgrund der ersten Zeile in dem Verfahrensuper.printMethod();

2 Da es kein Aufruf an eine superMethode.

Beantwortet am 08/01/2014 um 22:15
quelle vom benutzer

stimmen
0

Sie müssen nicht die Oberklasse - Methode aufrufen , mit super.printMethod();der Methode außer Kraft zu setzen, aber Sie haben, so

Printed in Superclass

gedruckt. Um es nicht drucken, nehmen Sie den Anruf an super.printMethod();; es ist nicht nötig.

Denn onCreateOptionsMenu, es ist nicht die überschriebene Funktionalität verwenden, so gibt es keine Notwendigkeit zu nennen super.onCreateOptionsMenu.

Beantwortet am 08/01/2014 um 22:15
quelle vom benutzer

stimmen
0

Wenn Sie super () aufrufen, rufen Sie die übergeordnete Klasse-Methode. Die Überschreibung funktionieren würde, noch ohne „Gedruckt in Superklasse“ gedruckt, wenn Sie einfach den super () Aufruf gelöscht.

Beantwortet am 08/01/2014 um 22:15
quelle vom benutzer

stimmen
2
  • wenn die Unterklasse überschreibt, warum Super println Anzeige noch auf dem Bildschirm?

    Weil Sie genannt super.printMethod(). Das ruft die übergeordnete Klasse Umsetzung printMethod().

  • warum ist super nicht im folgenden Code aufgerufen wird, wenn die Methode überschrieben wird?

    Da der Entwickler nicht brauchen, oder nicht den Code in der übergeordneten Klasse wollte execute- er die Methode umschreiben ganz wollte. Sie könnten auch das overrideSchlüsselwort verwendet , wenn die übergeordnete Implementierung nicht definiert ist, wie zum Beispiel mit einer Schnittstelle oder einer abstrakten Klasse.

    Der Aufruf der übergeordneten Klasse Implementierung einer Methode ist nicht erforderlich.

Beantwortet am 08/01/2014 um 22:17
quelle vom benutzer

stimmen
1

wenn die Unterklasse überschreibt, warum Super println Anzeige noch auf dem Bildschirm? es ist nicht nur annehmen, auf der Unterklasse den Inhalt des Verfahrens angezeigt werden?

Diese Linie:

super.printMethod();

Wird der Anruf superKlasse printMethod(). Dies wird im Wesentlichen werden:

new Superclass().printmethod();

Sie brauchen nicht super zu rufen eine Überschreibung zu tun. Tun Sie dies statt:

// overrides printMethod in Superclass
public void printMethod() {
    //super.printMethod();
    System.out.println("Printed in Subclass");
}

Eine weitere Möglichkeit, Ihre Frage zu nähern, ist folgendes zu tun:

public class Superclass {    
    public void printMethod() {
        System.out.println("Printed in " + this.getClass().getName() + ".");
    }
}

Dann tun Sie einfach:

public class Subclass extends Superclass {    
    // overrides printMethod in Superclass
    public void printMethod() {
        super.printMethod();//just do override
    }
    public static void main(String[] args) {
        Subclass s = new Subclass();
        s.printMethod();    
    }
}

eine andere Frage, warum Super nicht in dem folgenden Code aufgerufen wird, wenn die Methode überschrieben wird?

Sie brauchen nicht superzu tun , @Overridewie oben erwähnt. Von dieser Frage :

Verwenden Sie es jedes Mal eine Methode für zwei Vorteile außer Kraft setzen. Machen Sie es so, dass Sie die Vorteile des Compilers nehmen Überprüfung sicherstellen, dass Sie überschreiben tatsächlich eine Methode, wenn Sie denken, Sie sind. Auf diese Weise, wenn Sie einen häufigen Fehler falscher Schreibweise eines Methodennamen machen oder nicht korrekt die Parameter entsprechen, werden Sie gewarnt, dass Sie die Methode tatsächlich nicht außer Kraft setzen, wie Sie denken, es tut. Zweitens macht es Ihren Code leichter zu verstehen, weil es offensichtlich ist, wenn Methoden überschrieben werden.

Darüber hinaus können in Java 1.6 Sie es markieren verwenden, wenn eine Methode, um eine Schnittstelle für die gleichen Leistungen implementiert. Ich denke, es wäre besser, eine separate Anmerkung zu haben (wie @Implements), aber es ist besser als nichts.

Wenn Sie mehr darüber wissen wollen , wann die Verwendung supermit Methode überschreibt , dann lesen Sie in diesem Artikel Frage.

Beantwortet am 08/01/2014 um 22:19
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more