118 votes

Un fichier java peut-il avoir plus d'une classe ?

Quel est l'intérêt d'avoir plus d'une classe dans un fichier Java ? Je suis novice en Java.

Édité : Cela peut être réalisé en créant une classe interne à l'intérieur d'une classe publique, non ?

0 votes

142voto

Sean Reilly Points 9869

Oui, c'est possible. Cependant, il ne peut y avoir qu'un seul public de haut niveau classe par .java et les classes publiques de premier niveau doivent avoir le même nom que le fichier source.

L'objectif de l'inclusion de plusieurs classes dans un fichier source est de regrouper les fonctionnalités de support connexes (structures de données internes, classes de support, etc.) avec la classe publique principale. Notez qu'il est toujours bon de ne pas le faire - le seul effet est la lisibilité (ou non) de votre code.

2 votes

Je pense que c'est une bonne idée de le faire si vous voulez garder ces classes supplémentaires privées, afin qu'elles puissent être complètement modifiées plus tard sans casser quoi que ce soit d'extérieur qui utilise accidentellement ces classes.

3 votes

Il est là pour la compatibilité avec la version 1.0 (avant les classes imbriquées). C'est une grosse erreur dans le langage. Le plus grand avantage de l'utiliser est que les IDEs ont une gestion des fichiers sans espoir.

27 votes

Un public, niveau supérieur par fichier. Il peut y avoir autant de classes internes publiques par fichier que vous le souhaitez.

19voto

kgiannakakis Points 62727

Si vous souhaitez implémenter une classe publique, vous devez le faire dans un fichier portant le même nom que cette classe. Un seul fichier peut contenir une classe publique et éventuellement quelques classes privées. Ceci est utile si les classes sont uniquement utilisées en interne par la classe publique. En outre, la classe publique peut également contenir des classes internes.

Bien qu'il soit possible d'avoir une ou plusieurs classes privées dans un seul fichier source, je dirais qu'il est plus lisible d'utiliser des classes internes et anonymes. Par exemple, on peut utiliser une classe anonyme pour définir une classe Comparator à l'intérieur d'une classe publique :

  public static Comparator MyComparator = new Comparator() {
    public int compare(Object obj, Object anotherObj) {

    }
  };

La classe Comparator nécessitera normalement un fichier séparé afin d'être publique. De cette façon, elle est liée à la classe qui l'utilise.

1 votes

Ce n'est pas vraiment un privé si elle se trouve dans le fichier sans modificateur . Vous ne pouvez pas avoir un privé sans qu'il s'agisse d'une classe interne, car si vous le faisiez, qui pourrait l'utiliser ?

10voto

Alberto Points 744

Oui, autant que vous le souhaitez !

MAIS, une seule classe "publique" dans chaque fichier.

5voto

Confusion Points 6056

En général, il devrait y avoir une classe par fichier. Si vous organisez les choses de cette manière, lorsque vous recherchez une classe, vous savez que vous devez uniquement rechercher le fichier portant ce nom.

L'exception est lorsqu'une classe est mieux implémentée en utilisant une ou plusieurs petites classes d'aide. En général, le code est plus facile à suivre lorsque ces classes sont présentes dans le même fichier. Par exemple, vous pouvez avoir besoin d'une petite classe d'enveloppe "tuple" pour transmettre des données entre les appels de méthode. Un autre exemple est celui des classes "task" implémentant Runnable ou Callable. Elles peuvent être si petites qu'il est préférable de les combiner avec la classe parente qui les crée et les appelle.

4voto

Rich Apodaca Points 7327

Outre les classes internes anonymes, une autre utilisation est celle des classes internes privées qui implémentent une interface publique ( voir cet article ). La classe externe peut accéder à tous les champs et méthodes privés de la classe interne.

Cela vous permet de créer deux classes étroitement couplées, telles qu'un modèle et sa vue, sans exposer les implémentations de l'une ou l'autre. Un autre exemple est une collection et ses itérateurs.

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