En Java, ¿cómo llamo al método de una clase base desde el método de anulación en una clase derivada?


137

Tengo dos clases de Java: B, que extiende otra clase A, como sigue:

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

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

Me gustaría llamar al A.myMethod()de B.myMethod(). Vengo del mundo de C ++ , y no sé cómo hacer esto en Java.

Respuestas:


145

La palabra clave que estás buscando es super. Vea esta guía , por ejemplo.


44
Miradas como en C ++ se puede llamar a un método específico antepasado, pero no Java, puede simplemente pasar por la cadena ...
rogerdpack

132

Solo llámalo usando super.

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

21

La respuesta es la siguiente:

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()debe llamarse dentro MyMethod()de la class B. Entonces debería ser como sigue

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

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


7

Estoy bastante seguro de que puede hacerlo utilizando el mecanismo de reflexión de Java. No es tan sencillo como usar super pero te da más poder.

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

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

Esto no muestra ningún reflejo de Java en el código y es el mismo código que los demás. ¿Hay más en la respuesta?
Nelda.techspiress


3
super.baseMethod(params);

llame a los métodos base con super palabra clave y pase los parámetros correspondientes.


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

Vea, aquí está anulando uno de los métodos de la clase base, por lo tanto, si desea llamar al método de la clase base desde la clase heredada, entonces debe usar la palabra clave super en el mismo método de la clase heredada.


1

Si utiliza estos métodos para la inicialización, utilice los constructores de la clase A y pase la palabra clave super dentro del constructor de la clase B.

O si desea llamar a un método de superclase desde el método de subclase, entonces debe usar la palabra clave super dentro del método de subclase como: 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);
    }
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.