Classe interne en Java / Jusqu’à présent, nous savons que les membres de la classe sont des variables, des méthodes, des constructeurs et des blocs d’initialisation.
Mais il est également possible d’avoir une classe ou une interface en tant que membre d’une classe.
Une classe déclarée dans une autre classe est connue sous le nom de classes imbriquées en java. La portée d’une classe imbriquée est liée par la portée de sa classe englobante (classe externe).
Ainsi, si la classe B est définie à l’intérieur de la classe A, la classe B ne peut pas exister indépendamment sans la classe A. Ici, la classe A est une classe externe ou englobante et la classe B est une classe imbriquée.
Une classe imbriquée en java a accès aux membres (y compris les membres privés) de sa classe englobante. Mais, la classe englobante n’a pas accès aux membres de la classe imbriquée.
La classe qui est membre d’une autre classe peut être statique ou non statique. En d’autres termes, il existe deux types de classes imbriquées en java: statique et non statique.
La classe membre déclarée avec un modificateur statique est connue sous le nom de classe imbriquée statique en java.
La classe membre non statique est appelée classe interne ou classe imbriquée non statique. C’est le type le plus important de classe imbriquée.
Dans ce tutoriel, nous n’apprendrons que la classe interne en Java. Plus tard, nous discuterons de la classe imbriquée statique dans le didacticiel ultérieur.
Classe interne en Java
Une classe interne en java est une classe déclarée à l’intérieur d’une autre classe sans modificateur statique. Elle est également connue sous le nom de classe imbriquée non statique en Java. Il peut accéder à tous les membres (variables et méthodes) de sa classe externe.
Une classe interne ne peut avoir aucun type de membres statiques. Les membres de la classe interne java peuvent être:
- Variables d’instance
- Méthodes d’instance
- Constructeurs
- Bloc d’initialisation
- Classe interne
Syntaxe de la classe interne
access modifier class OuterClassName { . . . . . . . . . . access modifier class InnerClassName { // Members of the inner class. } // Other members of the outer class.}For example:public class Test { // Here, Test is an outer class. . . . . . . // Inner class public class A { // A is inner class as a member of its outer class. . . . . } }
La classe qui contient la classe interne est appelée classe englobante ou classe externe. La classe englobante est une classe de niveau supérieur alors que la classe interne est membre de la classe externe.
La relation entre la classe externe et la classe interne représente une relation Has-A. Une relation Has-A établit la relation entre deux classes. Il est également connu sous le nom de composition ou d’agrégation en Java.
Lorsqu’une classe interne est une classe englobante pour une autre classe interne, on parle d’imbrication de classes internes. Il n’y a pas de limite à l’imbrication des classes internes.
Dans quelle version la classe interne a-t-elle été introduite en Java ?
La classe interne a été introduite dans la version Java 1.1 sans aucune modification de la JVM utilisée pour gérer les fichiers de classe. Il est complètement implémenté à l’aide du compilateur Java.
Le compilateur Java génère un fichier de classe de points distinct pour chaque classe interne nommée OuterInnerInner.classe et pour une classe externe nommée Outer.classe. Par exemple, une classe interne A est compilée dans un test de classe nommé Test TestA.class .
Si un nom de fichier de classe de point contient le symbole « $ » en son milieu, il affiche un fichier de classe interne. Le format des fichiers de classe pour les classes internes est le même que celui des fichiers de classe pour les classes externes.
Par conséquent, JVM traite les fichiers de classe pour les classes internes et les classes externes de la même manière.
Caractéristiques de la classe interne
Il existe plusieurs caractéristiques importantes d’une classe interne qui sont les suivantes:
1. Une classe interne peut avoir le même nom que la classe externe.
2. La portée de la classe interne est limitée par la portée de sa classe externe.
3. Sans objet ou instance de classe externe existant, il n’y aura aucune chance d’un objet de classe interne existant.
4. Une classe interne peut accéder directement à toutes les variables et méthodes de la classe externe, y compris private.
5. Étant donné que la classe interne est un membre régulier de la classe externe, tout comme les variables et méthodes déclarées de la classe.
C’est pourquoi, nous pouvons appliquer tous les modificateurs d’accès Java tels que public, default, protected et private à la classe interne similaire aux autres membres d’une classe. Mais la classe extérieure ou normale ne peut pas être privée ou protégée.
6. Si le nom de la variable de la classe interne est le même que le nom de la variable de la classe externe, nous pouvons accéder à la variable de classe externe comme ceci. Nom de la classe extérieure.ce.VariableName; ici, cela représente l’objet de classe externe actuel.
7. La classe interne Java est masquée d’une autre classe de sa classe englobante. Par conséquent, il fournit un mécanisme de sécurité dans le programme d’application et diminue la lisibilité (compréhension) du programme.
8. Un objet de classe interne est souvent créé dans sa classe externe et ne peut pas être créé à partir d’autres classes.
9. Les objets de classe externe et de classe interne sont créés dans des emplacements mémoire distincts.
Syntaxe pour créer un objet de classe interne en Java
Une instance d’une classe interne partage une relation avec une instance d’une classe externe. Cette relation est telle que nous ne pouvons pas créer une instance de la classe interne sans avoir une instance de la classe externe.
Par conséquent, pour créer un objet de classe interne, vous devez d’abord créer un objet de classe externe à lier à la classe interne. Nous pouvons créer plusieurs objets d’une classe interne pour la même instance d’une classe externe.
La syntaxe pour créer un objet pour la classe interne est la suivante:
Syntax: OuterClass.InnerClass innerObject = outerObject.new InnerClass();For example:// First create an object of Outer class Test. Test t = new Test();// Second create an object of inner class A. Test.A innerObj = t.new A();
Comprenons comment une instance d’une classe interne partage une relation avec une instance d’une classe externe avec des exemples en temps réel.
Exemple en temps réel de classe interne
1. Supposons qu’il y ait une université. L’université contient plusieurs départements tels que l’électronique, l’informatique, l’électrique, la mécanique, etc.
Supposons que demain, le gouvernement a décidé de fermer cette université en raison de son activité illégale dans l’université. Si l’université est fermée, tous les départements de cette université seront fermés automatiquement.
C’est pourquoi on peut dire que les départements sont liés à son université. c’est-à-dire que leurs fonctionnalités sont liées à son université. Ainsi, sans objet universitaire existant, il n’y a aucune chance d’objets de département existants.
Puisque le département fait toujours partie de la classe universitaire. Par conséquent, nous devons déclarer la classe du département à l’intérieur de la classe universitaire.
class University { // University is outer class. . . . . . . . class Department { // Department is inner class. . . . . . . . . }}
Ainsi, sans un type d’objet existant, s’il n’y a aucune chance d’exister un autre type d’objet, nous devrions implémenter la classe interne.
2. Supposons qu’il y ait une voiture. Dans une voiture, plusieurs composants individuels importants sont nécessaires. Le composant le plus important de la voiture est le moteur.
Le moteur doit être nécessaire pour fabriquer une voiture. Mais sans un objet de voiture existant, il n’y a pas non plus de chance d’exister un objet moteur.
Puisqu’un moteur est toujours une partie importante d’une voiture. Par conséquent, le moteur de classe doit être déclaré à l’intérieur de la voiture de classe.
class Car { . . . . . . . . . class Engine { . . . . . . . . . . }}
Les deux exemples en temps réel ci-dessus sont expliqués pour obtenir les idées de base de la classe interne. Nous allons maintenant prendre l’exemple suivant basé sur l’API Java.
3. Comme nous le savons, en Java, il existe un concept de carte dans l’API collections. Une carte n’est rien d’autre qu’un groupe de paires clé-valeur. Chaque paire clé-valeur est appelée une entrée. Maintenant, sans objet map existant, y a-t-il une chance d’objet d’entrée existant?
La réponse est non car sans objet existant d’une carte, l’objet d’entrée ne peut pas également exister. C’est pourquoi l’entrée d’interface est définie dans l’interface de la carte.
Interface Map { // Map is an outer interface. . . . . . . . . . Interface Entry { // Entry is an inner interface. . . . . . . . . . . } }
Maintenant, vous auriez compris de l’exemple en temps réel ci-dessus que when devrait utiliser une classe interne en programmation Java.
Utilisation de la classe interne en Java
Il existe les utilisations importantes suivantes de la classe interne en Java.
1. La classe interne est une fonctionnalité précieuse car elle nous permet de regrouper les classes et les interfaces en un seul endroit qui appartient logiquement ensemble.
2. Cela aide à contrôler la visibilité de l’un dans l’autre afin qu’il soit plus lisible et maintenable.
3. La meilleure utilisation de la classe interne java est lorsque sa fonctionnalité est liée à sa classe externe. Autrement dit, sans objet de classe externe existant, il n’y a aucune chance d’objet de classe interne existant. Comprendre les exemples en temps réel.
4. . La classe interne Java est utile pour assurer la sécurité du code important. Par exemple, si nous déclarons la classe interne comme privée, elle n’est pas disponible pour les autres classes. Cela signifie qu’un objet à la classe interne ne peut pas être créé dans d’autres classes.
Comprenons-le à l’aide d’un exemple de programme en temps réel.
Supposons que nous créons une classe BankAcct. Pour obtenir des détails de compte bancaire, nous définissons les variables d’instance « solde » et « taux » d’intérêt dans la classe.
La méthode calInterest() calcule le montant des intérêts et affiche le montant du solde. Regardez le code source suivant.
class BankAcct { // Balance and Rate of interest. private double bal; private double rate; // Calculating interest and updated balance. void calInterest() { double interest = bal * rate/100; bal += interest; System.out.println("Balance amount = " +bal); }}
Comme vous observez qu’il n’y a pas de sécurité pour ce code en raison de l’absence de modificateurs d’accès avant la classe BankAcct.
Comme il est sous les modificateurs d’accès par défaut, tout programmeur peut facilement créer un objet de cette classe et accéder aux membres de la classe depuis l’extérieur des autres classes. Par conséquent, il n’y a pas de sécurité pour la classe BankAcct.
Par exemple, tout programmeur peut créer une autre classe. Il créera une instance de classe BankAcct et pourra modifier le taux d’intérêt comme ceci:
class Myclass { public static void main(String args ){ BankAcct ba = new BankAcct(); ba.calInterest(11.5); } }
Ainsi, la méthode calInterest() est très sensible. Il doit être protégé des étrangers car les comptes de solde peuvent être mis à jour de l’extérieur par toute autre personne. Seule une personne autorisée devrait pouvoir mettre à jour les comptes de solde.
Pour assurer la sécurité de la méthode calInterest() et du taux d’intérêt, si nous mettons le code de la méthode calInterest() dans une classe interne et la rendons privée, personne ne peut y accéder depuis la classe extérieure. Regarde le code.
class BankAcct { . . . . . . . . private class Interest { private double rate; void calInterest() { double interest = bal * rate/100; bal += interest; System.out.println("Balance = " +bal); } }}
Maintenant, la question est de savoir comment accéder à la classe interne?
Pour accéder à la classe interne, nous allons créer une méthode contact() à l’intérieur de la classe externe. À l’intérieur de la méthode contact(), nous allons créer un objet de classe interne et pouvons accéder à ses membres.
Une personne de la banque d’authentification peut interagir avec la classe interne en appelant la méthode contact(). Lorsque la méthode contact() sera appelée, elle sera vérifiée avec un mot de passe, puis il pourra utiliser la classe interne et y accéder.
Ainsi, une classe interne peut fournir un mécanisme de sécurité au code important en Java.
Types de classe interne en Java
Sur la base de la déclaration et des comportements, il existe essentiellement quatre types de classes internes en Java. Ils sont les suivants:
- Classe Interne Normale ou Régulière
- Méthode Classe Interne Locale
- Classe Interne Anonyme
- Classe Interne Imbriquée statique
Dans ce tutoriel, nous allons comprendre chacun en bref.
1. Classe interne normale ou régulière : Une classe créée à l’intérieur d’une autre classe et en dehors de la méthode sans modificateur statique est appelée classe interne régulière ou normale.
2. Classe interne locale de la méthode: Une classe déclarée dans une méthode de la classe externe est appelée classe interne locale de la méthode.
3. Classe intérieure anonyme: Une classe déclarée sans aucun nom est appelée classe interne anonyme.
4. Classe interne imbriquée statique: Une classe déclarée avec un modificateur statique dans une classe est appelée classe interne imbriquée statique. Il est également connu comme une classe imbriquée de haut niveau. Il ne peut accéder qu’aux membres statiques de la classe externe.
Remarque : Les classes internes régulières, locales et anonymes sont des classes imbriquées non statiques.
Avantages de la classe interne
Il y a essentiellement cinq avantages de la classe interne en java. Ils sont les suivants:
1. La classe interne fournit un moyen de regrouper les classes et les interfaces en un seul endroit qui appartient logiquement ensemble.
2. Il peut accéder directement à toutes les variables et méthodes de la classe externe, y compris private.
3. Il est utilisé pour développer un code plus lisible et maintenable.
4. Il a besoin de moins de code à écrire.
5. Il augmente l’encapsulation.
Différence entre la classe imbriquée et la classe interne en Java
La classe imbriquée est une classe définie dans une autre classe. Il existe deux types de classe imbriquée : statique et non statique. La classe imbriquée non statique est la classe interne.
Espérons que ce tutoriel a couvert toutes les fonctionnalités importantes de la classe interne en java avec des exemples de programmes en temps réel. J’espère que vous aurez compris l’idée de base d’utiliser la classe interne en Java.
Merci d’avoir lu!!!Suivant ⇒ Classe interne des membres en Java
Pre Précédent Suivant ⇒