46 votes

Appel de la méthode de la super super classe

Disons que j'ai trois classes A, B et C.

  • B prolonge A
  • C prolonge B

Tous ont une public void foo() définie.

Maintenant, à partir de la foo() de C, je veux invoquer la méthode foo() (PAS la méthode de son parent B mais la méthode de la super super classe A).

J'ai essayé super.super.foo(); , mais la syntaxe n'est pas valide. Comment puis-je atteindre cet objectif?

23voto

Jon Skeet Points 692016

Vous ne pouvez pas - car cela casserait l'encapsulation.

Vous pouvez appeler la méthode de votre superclasse car on suppose que vous savez ce qui casse l'encapsulation dans votre propre classe, et évitez cela... mais vous ne savez pas quelles règles votre superclasse applique - vous ne pouvez donc pas simplement contourner un mise en œuvre là-bas.

3voto

AppUs Points 6156

Vous ne pouvez pas le faire de manière simple.

Voici ce que je pense que vous pouvez faire :

Ayez un bool dans votre classe B. Maintenant, vous devez appeler le foo de B à partir de C comme [super foo] mais avant de faire cela, définissez le bool sur true. Maintenant, dans le foo de B, vérifiez si le bool est vrai, puis n'exécutez aucune étape et appelez simplement le foo de A.

J'espère que cela t'aides.

2voto

Jainam MJ Points 122

Oui tu peux le faire. Ceci est un hack. Essayez de ne pas concevoir votre programme comme ceci.

 class A
{
    public void method()
    { /* Code specific to A */ }
}

class B extends A
{
    @Override
    public void method()
    { 
       //compares if the calling object is of type C, if yes push the call to the A's method.
       if(this.getClass().getName().compareTo("C")==0)
       { 
           super.method(); 
       }
       else{  /*Code specific to B*/  }

    }
}

class C extends B
{
    @Override
    public void method()
    { 
        /* I want to use the code specific to A without using B */ 
        super.method();

    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X