web-dev-qa-db-fra.com

Java Héritage - appel de la méthode de la superclasse

Supposons que j'ai les deux cours suivants

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 je lance un nouvel objet de type bêta, comment puis-je exécuter la logique alphamethod1 Trouvée dans la classe alpha plutôt que bêta? Puis-je simplement utiliser super().alphaMethod1() <- Je me demande si cela est possible.

L'autotype dans Eclipse IDE me donne la possibilité de sélectionner alphamethod1 Dans la classe alpha ou dans la classe beta.

52
roz

Tu peux faire:

super.alphaMethod1();

Notez que super est une référence au parent, mais super () est son constructeur.

79
Michał Šrajer

Utilisez simplement super.alphaMethod1();

Voir super mot-clé en Java

19
Sandeep Pathak

Vous ne pouvez pas appeler alphaMethod1 () en utilisant l'objet de la version bêta Mais vous avez deux solutions:

solution 1: appelez l'alpha alphaMethod1() à partir de la bêta alphaMethod1()

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

ou de toute autre méthode de bêta comme:

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();
   }
}

solution 2: crée l'objet alpha et appelle l'alpha alphaMethod1()

class Test extends Beta
{
   public static void main(String[] args)
   {
      Alpha alpha = new Alpha();
      alpha.alphaMethod1();
   }
}
12
CKR666

Il est possible d'utiliser super pour appeler la méthode depuis la classe mère, mais cela signifierait que vous avez probablement un problème de conception. Peut-être que B.alphaMethod1() ne devrait pas remplacer la méthode de A et s'appelle B.betaMethod1().

Si cela dépend de la situation, vous pouvez mettre une logique de code comme:

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

Ainsi, il n'appellera la méthode de A qu'en cas de besoin et restera invisible pour l'utilisateur de la classe.

4
Dalshim

Chaque fois que vous créez un objet de classe enfant, cet objet possède toutes les fonctionnalités de la classe parent. Ici, Super () est la facilité pour le parent d’accession.

Si vous écrivez super () à ce moment-là, le constructeur par défaut des parents est appelé. idem si vous écrivez super.

ce mot-clé désigne l'objet actuel de la même manière que la fonction super clé Word pour accéder aux parents.

3
Pradip Bhatt