66 votes

Comment une classe peut-elle avoir un membre de son propre type, n'est-ce pas cette récursivité infinie ?

Disons que je définis une classe qui a comme membre une variable du même type qu'elle.

 public class Abc {
    private Abc p;
}

Cela fonctionne réellement, à ma grande surprise.

Pourquoi je pense que cela ne devrait pas: créer une instance de Abc , il contient une variable de type Abc , qui contient une variable de type Abc , qui contient une variable de type Abc , qui .....

Evidemment je me trompe, quelqu'un pourrait-il m'éclairer sur la façon dont ?

47voto

Hovercraft Full Of Eels Points 161146

Vous déclarez seulement la variable et ne la créez pas. Essayez de le créer à la déclaration ou dans le constructeur et faites-moi savoir ce qui se passe :

 public class Abc {
   private Abc p = new Abc(); // have fun!

   public static void main(String[] args) {
      new Abc();
   }
}

Incidemment, si vous ne le créez pas dans la classe, mais acceptez plutôt une référence dans une méthode getter ou un paramètre de constructeur, votre code fonctionnera très bien. C'est ainsi que fonctionnent certaines listes chaînées.

13voto

ring bearer Points 8369

Lorsque vous souhaitez modéliser des scénarios du monde réel, vous devrez peut-être utiliser cette notion. Par exemple, pensez à la branche d'un arbre. La branche d'un arbre peut avoir n nombre de branches dessus. Ou de formation en informatique, pensez à Node d'une liste chaînée. Un nœud aura une référence au nœud à côté de lui. A la fin, le suivant contiendra un null pour indiquer la fin de la liste.

Il ne s'agit donc que d'une référence, indiquant que ce type peut faire référence à l'un des siens. Rien de plus.

1voto

Rakesh Horkeri Points 53

Résumant certaines des réponses ici.

La classe contient une référence à l'un des siens. La meilleure analogie dans le monde réel serait une chasse au trésor. Un lieu d'indice contient des données et un indice qui mène à un autre lieu d'indice que vous connaissez encore une fois.

Cela ne veut pas dire qu'un lieu d'indice a un autre lieu d'indice en lui, le genre dont vous semblez déduire.

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