2 votes

Héritage Java et sous-classes

Java débutant ici avec une question rapide.

Voici la mise en page de base d'une classe que j'utiliserai.

public class Foo{
    public static void Method1(){
        Method 2();
    }
    public static void Method2(){
    }
}

Et voici une sous-classe.

public class Foo2{
    public static void Method2(){
    }
}

Comment puis-je écrire cela pour que l'appel de Foo2.Method1() utilise Foo2.Method2() au lieu de Foo1.Method2()?

3voto

eran Points 12628

Le seul moyen est de créer une Method1 dans Foo2 également, qui appellera Foo2.Method2. Foo.Method2 étant statique va toujours être appelé par Foo.Method1, quel que soit le sous-classement ultérieur. Il n'y a tout simplement pas de substitution en ce qui concerne les méthodes statiques.

3voto

DaveFar Points 3360

Les méthodes statiques ne sont pas polymorphes, il n'y a donc pas de dispatch dynamique. Par conséquent, la solution est

  • de rendre Method2 non statique pour activer le dispatch dynamique ou
  • de remplacermasquer Méthode1 dans Foo2 ou
  • si cela entraînerait beaucoup de duplication de code, de créer une méthode d'aide pour remplacermasquer uniquement certaines parties du code.

Détails sur les méthodes statiques : celles-ci se trouvent au niveau de la classe, donc

  • vous ne pouvez pas les substituer - si vous les définissez également dans Foo2, vous masquez l'implémentation dans Foo.
  • vous ne devriez pas les appeler sur une instance, comme vous le faites dans Méthode1. Si vous les appelez de la manière conventionnelle, Foo.Méthode2, il devient évident quel est le problème et quelles sont les solutions possibles.

0voto

A.H. Points 23369

L'héritage et la surcharge des méthodes ne fonctionnent que sur la partie non statique d'une classe. Par conséquent, il n'y a aucun moyen de faire ce que vous voulez. C'est également la raison pour laquelle static devrait être utilisé aussi peu que possible - il ne peut pas être étendu.

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