En Java, comment appeler la méthode d'une classe de base à partir de la méthode de substitution dans une classe dérivée?


137

J'ai deux classes Java: B, qui étend une autre classe A, comme suit:

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

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

Je voudrais appeler le A.myMethod()de B.myMethod(). Je viens du monde C ++ et je ne sais pas comment faire cette chose basique en Java.

Réponses:


145

Le mot-clé que vous recherchez est super. Consultez ce guide , par exemple.


4
On dirait qu'en C ++, vous pouvez appeler une méthode ancêtre spécifique, mais pas java, vous pouvez simplement la passer dans la chaîne ...
rogerdpack

132

Appelez-le simplement en utilisant super.

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

21

La réponse est la suivante:

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()doit être appelé à l'intérieur MyMethod()du class B. Donc ça devrait être comme suit

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

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


7

Je suis presque sûr que vous pouvez le faire en utilisant le mécanisme Java Reflection. Ce n'est pas aussi simple que d'utiliser super mais cela vous donne plus de puissance.

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

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

Cela ne montre aucune réflexion java dans le code et est le même code que les autres. Y a-t-il plus à la réponse?
Nelda.techspiress


3
super.baseMethod(params);

appelez les méthodes de base avec super mot - clé et passez les paramètres respectifs.


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

Vous voyez, ici vous remplacez l'une des méthodes de la classe de base, donc si vous aimez appeler la méthode de la classe de base à partir de la classe héritée, vous devez utiliser le super mot - clé dans la même méthode de la classe héritée.


1

Si vous utilisez ces méthodes pour l'initialisation, utilisez des constructeurs de classe A et passez le super mot-clé dans le constructeur de la classe B.

Ou si vous voulez appeler une méthode de super-classe à partir de la méthode de sous-classe, vous devez utiliser le mot-clé super dans la méthode de sous-classe comme: 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);
    }
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.