web-dev-qa-db-fra.com

Un fichier Java peut-il avoir plus d’une classe?)

Quel est le but d'avoir plus d'une classe dans un fichier Java? Je suis nouveau en Java.

Edited: Cela peut être réalisé en créant une classe interne dans une classe publique, non?

100
yesraaj

Oui il peut. Cependant, il ne peut y avoir qu'un seul niveau supérieur public classe par .Java fichier et les classes de niveau supérieur publiques doivent porter le même nom que le fichier source.

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

123
Sean Reilly

Si vous souhaitez implémenter une classe publique, vous devez l'implémenter dans un fichier portant le même nom que cette classe. Un seul fichier peut contenir une classe publique et éventuellement certaines classes privées. Ceci est utile si les classes ne sont utilisées qu'en interne par la classe publique. De plus, la classe publique peut également contenir des classes internes.

Bien qu’il soit correct 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 à la place. Par exemple, on peut utiliser une classe anonyme pour définir une classe de comparaison dans une classe publique:

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

    }
  };

La classe de comparaison nécessite normalement un fichier séparé pour être publique. De cette façon, il est regroupé avec la classe qui l’utilise.

17
kgiannakakis

Oui, autant que vous voulez!

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

10
Alberto

Un fichier .Java est appelé une unité de compilation. Chaque unité de compilation peut contenir un nombre quelconque de classes et d'interfaces de premier niveau. S'il n'y a pas de types de niveau supérieur publics, l'unité de compilation peut être nommée de n'importe quelle manière.

//Multiple.Java
//preceding package and import statements

class MyClass{...}
interface Service{...}
...
//No public classes or interfaces
...

Il ne peut y avoir qu'une seule classe/interface publique dans une unité de compilation. Le "cu. doit être nommé exactement comme ce type de niveau supérieur public.

//Test.Java
//named exactly as the public class Test
public class Test{...}
//!public class Operations{...}
interface Selector{...}
...
//Other non-public classes/interfaces

Points importants sur la méthode principale - partie 1

partie 2

(Points concernant le nombre de classes et leurs niveaux d’accès couverts dans la partie 2)

6
Utsav

Oui, vous pouvez créer plusieurs classes publiques, mais il doit s'agir d'une classe imbriquée.

public class first {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
    }

    public class demo1
    {

        public class demo2
        {

        }
    }
}
4
Ganesh

En général, il devrait y avoir une classe par fichier. Si vous organisez les choses de cette façon, 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'assistance. Généralement, le code est plus facile à suivre lorsque ces classes sont présentes dans le même fichier. Par exemple, vous aurez peut-être besoin d'une petite classe wrapper 'Tuple' pour transmettre certaines données entre les appels de méthodes. Un autre exemple est celui des classes de tâches implémentant Runnable ou Callable. Ils peuvent être si petits qu'ils sont mieux combinés avec la classe parent qui les crée et les appelle.

4
Confusion

Outre les classes internes anonymes, une autre utilisation est les 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 leurs implémentations. Un autre exemple est une collection et ses itérateurs.

4
Rich Apodaca

Oui 200%,

Exemple:

class A {
 void methodDeclaration() { System.out.println("!!!"); }
 }
 class B {
 public static void main(String[] args) {
new A().methodDeclaration();
    }
 }

Je pense qu'il devrait y avoir "il ne peut y avoir qu'une seule classe publique de niveau supérieur NON-STATIQUE par fichier .Java". N'est-ce pas?

2
HolidayCactus

Oui, c’est possible, mais il ne peut y avoir qu’une seule classe publique à l’intérieur d’un paquet tel que Java crée le fichier .Class qui porte le même nom que le nom de la classe Public. Par conséquent, si leur nombre est supérieur à 1, public class, il serait difficile de sélectionner pour le compilateur le nom du fichier Class.

2
Meetu Choudhary

Dans un fichier .Java, il ne peut y avoir qu'une seule classe publique de niveau supérieur dont le nom est identique au fichier, mais plusieurs classes internes publiques peuvent être exportées vers tout le monde et accéder aux champs/méthodes de la classe externe, par exemple. : AlertDialog.Builder (modifié par 'public static') dans AlertDialog (modifié par 'public')

1
Baoyang

Si vous souhaitez implémenter un singleton, c'est-à-dire une classe qui s'exécute dans votre programme avec une seule instance en mémoire tout au long de l'exécution de l'application, l'un des moyens d'implémenter un singleton consiste à imbriquer une classe statique privée dans une classe publique. . Ensuite, la classe privée interne ne s'installe que lorsque sa méthode publique pour accéder à l'instance privée est appelée.

Découvrez cet article du wiki,

https://en.wikipedia.org/wiki/Singleton_pattern

Le concept prend un certain temps à mâcher.

1
chrismjh

Varie ... Un tel exemple serait un classes anonymes (vous en rencontrerez beaucoup lorsque vous utiliserez des écouteurs d'événements et autres).

1
laginimaineb

Oui ! Le fichier .Java ne peut contenir qu'une seule classe publique.

Si vous voulez que ces deux classes soient publiques, elles doivent être placées dans deux fichiers .Java: A.Java et B.Java.

1
Rakesh Singh

Oui, vous pouvez avoir plusieurs classes dans un fichier .Java. Au plus, l'un d'entre eux peut être public. Les autres sont des paquets privés. Ils NE PEUVENT PAS être privés ou protégés. Si l'un est public, le fichier doit avoir le nom de cette classe. Sinon, tout peut être donné à ce fichier en tant que nom.

Avoir plusieurs classes dans un fichier signifie que ces classes sont dans le même package. Ainsi, toutes les autres classes contenues dans ce package mais pas dans ce fichier peuvent également utiliser ces classes. De plus, lorsque ce paquet est importé, la classe importatrice peut également les utiliser.

Pour une enquête plus détaillée, vous pouvez visiter mon blog dans ici .

1
Merter Sualp

Oui Vous pouvez avoir plus d'une classe dans un fichier .Java. Mais vous avez rendu l'un d'eux public. et enregistrez le fichier .Java avec le même nom que le nom de la classe publique. lorsque vous compilerez ce fichier .Java, vous obtiendrez des fichiers .class distincts pour chaque classe définie dans le fichier .Java.

En dehors de cela, il y a trop de méthodes pour définir plus d'une classe dans un fichier .Java.

  1. utiliser le concept de classes intérieures.
  2. Utiliser le concept de classes anonymes.
1
Gaurav Varshney

Il ne peut y avoir qu'une classe publique de niveau supérieur dans un fichier. Le nom de classe de cette classe publique doit être le nom du fichier. Il peut avoir de nombreuses classes intérieures publiques.

Vous pouvez avoir plusieurs classes dans un seul fichier. Les limites pour différents niveaux de visibilité de classe dans un fichier sont les suivantes:

classes de haut niveau:
1 classe publique
0 cours privé
un nombre quelconque de classes par défaut/protégées

classes intérieures:
un nombre quelconque de classes internes avec une visibilité quelconque (par défaut, privé, protégé, public)

S'il vous plait corrigez moi si je me trompe.

0