Wie rufe ich in Java die Methode einer Basisklasse von der überschreibenden Methode in einer abgeleiteten Klasse auf?


136

Ich habe zwei Java-Klassen: B, die eine andere Klasse A wie folgt erweitert:

class A {
    public void myMethod() { /* ... */ }
}

class B extends A {
    public void myMethod() { /* Another code */ }
}

Ich möchte das A.myMethod()von anrufen B.myMethod(). Ich komme aus der C ++ - Welt und weiß nicht, wie ich diese grundlegende Sache in Java machen soll.

Antworten:


145

Das gesuchte Schlüsselwort ist super. Siehe zum Beispiel diese Anleitung .


4
Sieht so aus, als ob Sie in C ++ eine bestimmte Vorfahrenmethode aufrufen können, aber nicht Java. Sie können sie einfach an die Kette weitergeben ...
Rogerdpack

131

Nennen Sie es einfach mit super.

public void myMethod()
{
    // B stuff
    super.myMethod();
    // B stuff
}

21

Die Antwort lautet wie folgt:

super.Mymethod();
super();                // calls base class Superclass constructor.
super(parameter list);          // calls base class parameterized constructor.
super.method();         // calls base class method.

20

super.MyMethod()sollte innerhalb MyMethod()der genannt werden class B. So sollte es sein

class A {
    public void myMethod() { /* ... */ }
}

class B extends A {
    public void myMethod() { 
        super.MyMethod();
        /* Another code */ 
    }
}


7

Ich bin mir ziemlich sicher, dass Sie dies mit dem Java Reflection-Mechanismus tun können. Es ist nicht so einfach wie die Verwendung von Super, aber es gibt Ihnen mehr Leistung.

class A
{
    public void myMethod()
    { /* ... */ }
}

class B extends A
{
    public void myMethod()
    {
        super.myMethod(); // calling parent method
    }
}

Dies zeigt keine Java-Reflexion im Code und ist der gleiche Code wie die anderen. Gibt es mehr zu der Antwort?
Nelda.techspiress


3
super.baseMethod(params);

Rufen Sie die Basismethoden mit dem Schlüsselwort super auf und übergeben Sie die entsprechenden Parameter.


3
class test
{
    void message()
    {
        System.out.println("super class");
    }
}

class demo extends test
{
    int z;
    demo(int y)
    {
        super.message();
        z=y;
        System.out.println("re:"+z);
    }
}
class free{
    public static void main(String ar[]){
        demo d=new demo(6);
    }
}

3

Sehen Sie, hier überschreiben Sie eine der Methoden der Basisklasse. Wenn Sie also die Basisklassenmethode von der geerbten Klasse aufrufen möchten, müssen Sie das Schlüsselwort super in derselben Methode der geerbten Klasse verwenden.


1

Wenn Sie diese Methoden zur Initialisierung verwenden, verwenden Sie Konstruktoren der Klasse A und übergeben Sie das Super-Schlüsselwort im Konstruktor der Klasse B.

Oder wenn Sie eine Methode der Superklasse aus der Unterklassenmethode aufrufen möchten, müssen Sie das Schlüsselwort super in der Unterklassenmethode verwenden, wie: super.myMethod ();


1
// Using super keyword access parent class variable
class test {
    int is,xs;

    test(int i,int x) {
        is=i;
        xs=x;
        System.out.println("super class:");
    }
}

class demo extends test {
    int z;

    demo(int i,int x,int y) {
        super(i,x);
        z=y;
        System.out.println("re:"+is);
        System.out.println("re:"+xs);
        System.out.println("re:"+z);
    }
}

class free{
    public static void main(String ar[]){
        demo d=new demo(4,5,6);
    }
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.