Herencia de Java-llamando al método superclass


Supongamos que tengo las siguientes dos clases

public class alpha {

    public alpha(){
        //some logic
    }

    public void alphaMethod1(){
        //some logic
    }
}

public class beta extends alpha {

    public beta(){
        //some logic
    }

    public void alphaMethod1(){
        //some logic
    }
}

public class Test extends beta
{
     public static void main(String[] args)
      {
        beta obj = new beta();
        obj.alphaMethod1();// Here I want to call the method from class alpha.
       }
}

Si inicioun nuevo objeto de tipo beta, ¿cómo puedo ejecutar la lógica alphamethod1 que se encuentra en la clase alfa en lugar de beta? Puedo usar super().alphaMethod1()

Autotype en Eclipse IDE me da la opción de seleccionar alphamethod1 ya sea desde class alpha o class beta.

Author: Rudra, 2011-08-01

5 answers

Puedes hacer:

super.alphaMethod1();

Tenga en cuenta que super es una referencia al padre, pero super() es su constructor.

 56
Author: Michał Šrajer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-01 09:39:49

Simplemente use super.alphaMethod1();

Ver super palabra clave en java

 17
Author: Sandeep Pathak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-01 09:32:55

No puedes llamar a alphaMethod1() de alpha usando el objeto de beta Pero tienes dos soluciones:

Solución 1: llamar a alfa alphaMethod1() desde beta alphaMethod1()

class Beta extends Alpha
{
  public void alphaMethod1()
  {
    super.alphaMethod1();
  }
}

O de cualquier otro método de Beta como:

class Beta extends Alpha
{
  public void foo()
  {
     super.alphaMethod1();
  }
}

class Test extends Beta 
{
   public static void main(String[] args)
   {
      Beta beta = new Beta();
      beta.foo();
   }
}

Solución 2 : crea el objeto de alpha y llama a alpha alphaMethod1()

class Test extends Beta
{
   public static void main(String[] args)
   {
      Alpha alpha = new Alpha();
      alpha.alphaMethod1();
   }
}
 12
Author: CKR666,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-08 09:39:35

Es posible usar super para llamar al método desde la clase madre, pero esto significaría que probablemente tiene un problema de diseño. Tal vez B.alphaMethod1() no debería anular el método de A y ser llamado B.betaMethod1().

Si depende de la situación, puede poner alguna lógica de código como:

public void alphaMethod1(){
    if (something) {
        super.alphaMethod1();
        return;
    }
    // Rest of the code for other situations
}

Así solo llamará al método de A cuando sea necesario y permanecerá invisible para el usuario de la clase.

 4
Author: Dalshim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-01 09:39:52

Cada vez que se crea un objeto de clase hijo, ese objeto tiene todas las características de la clase padre. Aquí Super() es la facilidad para el padre de la adhesión.

Si escribes super() en ese momento se llama al constructor predeterminado de los padres. lo mismo si escribes súper.

Esta palabra clave se refiere al objeto actual lo mismo que a la palabra súper clave facilty para acceder a los padres.

 3
Author: Pradip Bhatt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-12 14:06:21