Cet article étudie principalement des classes multiplexées dans la programmation Java. Alors, qu'est-ce qu'une classe multiplexée et quelle est son utilisation? Voici une introduction détaillée.
Après avoir lu l'interview avec Luo Luo Shengyang, je n'ai pas pu m'empêcher de l'admirer. Il était très jeune. Je pensais que j'étais au même âge que Luo Yonghao, et j'avais rencontré l'un des grands gars qui n'étaient pas une programmation junior et lycée. Après l'interview, j'ai constaté que Luo Luo était également une personne qui a fait un pas à la fois. Ne dites pas que c'est difficile à faire ou vous ne pouvez pas le faire. Vous ne l'avez pas essayé ni persisté.
Si vous ne pouvez pas voler, courez, si vous ne pouvez pas courir, marchez, si vous ne pouvez pas marcher, ramper, mais
Quoi que vous fassiez, vous devez continuer à avancer - Martin Luther King.
Le titre de classe de réutilisation était difficile à comprendre au début. Plus tard, je suis allé lire la version anglaise originale du livre. En fait, le titre réutilisait des cours et la réutilisation des cours signifiait "utiliser des choses prêtes à l'emploi". En fait, les deux méthodes de mise en œuvre sont souvent entendues en Java - combinaison et héritage.
(1) combinaison
Le rôle de Has-A.
classe publique TV {show show; public String toString () {return "showgirl"; }} classe afficher {} Mentionnons la méthode de tostring. Lorsque vous avez besoin de chaîne et que vous êtes un objet, le compilateur appellera la méthode ToString de l'objet.
Il y a une émission à la télévision. Le spectacle actuel n'est pas initialisé et est nul. La méthode Show ne peut pas être appelée.
La combinaison a un effet puissant. Dans une perspective orientée objet, si vous créez une classe de voiture, vous pouvez facilement combiner des composants en verre, léger, moteur et autres composants de voiture en utilisant la combinaison.
(2) l'héritage
IS-A
package com.myown.iaiti; classe publique père {public int i; void get () {System.out.println ("père");}} package fils; import com.myown.iaiti. *; public class son étend père {père f = nouveau père (); int j = fi; fils fils = new son (); son.get ();} public Void get () {super.get (); System.out.println ("Son");}}Il y a un problème avec les autorisations d'accès aux packages ici. Si le public n'est pas ajouté, la valeur par défaut est d'accéder au membre dans le package. Différents accès à package, c'est-à-dire la méthode d'accès du membre du père en fils est invisible. Et les mots publics sont visibles, donc j'accéder à l'accès.
La partie privée ne peut pas être héritée et appartient à la classe parent privée, tandis que la partie publique sera héritée et les méthodes qui doivent être modifiées peuvent être réécrites. Les attributs à ajouter peuvent être ajoutés séparément.
De plus, si la méthode publique des parents d'origine est réécrite, si la méthode publique du père d'origine n'ajoute pas le public, cela ne réduira pas la visibilité de la méthode héritée du père, ce qui signifie que la visibilité de la méthode héritée dans la classe parent ne peut pas être réduite. Super fait référence à la classe parent, à savoir le père.
Un autre point est qu'en fait, toutes les classes de Java héritent implicitement la classe d'objets. L'objet est la classe parent et d'autres classes sont des sous-classes. Les étrangers aiment en parler comme classe de base. Les sous-classes sont également appelées classes exportées ou classes dérivées.
(3) agent
Il existe un moyen relativement difficile de comprendre dans le modèle de conception - le modèle d'agent. L'auteur en parle très intéressant. L'agent est la doctrine de la moyenne de la combinaison et de l'héritage.
Fils de package; classe Père {public void get () {System.out.println ("père"); }} La classe publique Son étend le père {public static void main (String [] args) {père f = new père (); f.get (); }} classe FatherProxy {père privé f = nouveau père (); public void get () {f.get (); }}Si vous traitez directement Père en tant que membre, la méthode du père sera exposée à cette classe. Ensuite, nous pouvons utiliser une classe de proxy comme sa pèreproxy. Je définis comment obtenir la méthode de get moi-même. Je sais que cela appelle la méthode de Get du père, mais la personne qui utilise mon proxy ne sait pas. Je lui dis simplement que si vous voulez l'utiliser, utilisez simplement la méthode de Get du proxy. L'encapsulation est reflétée. Ce qui précède est juste un exemple simple de coup aléatoire.
(4) réécrire et recharger
classe Père {public void get (String S) {System.out.println ("père"); } public void get (boolean b) {System.out.println ("boolean"); }} La classe publique Son étend le père {@Override public void get (String s) {System.out.println ("père"); } // @Override // Il y aura un message d'erreur car la classe parent n'a pas cette méthode, ce n'est pas une réécriture de public void get (int i) {System.out.println ("SonInt"); } public static void main (String [] args) {Son s = new Son (); s.get ("d"); s.get (false); s.get (1); }}La réécriture consiste à réinserver la méthode de la classe parent. S'il n'y a pas de réécriture ou de surcharge, alors lorsque la sous-classe appelle une méthode que la sous-classe n'a pas, elle appelle réellement la classe parent.
La surcharge est le même nom de méthode, mais le nom du paramètre est différent. Pour vous empêcher de surcharger de manière incorrecte, vous pouvez ajouter la balise @Override, ce qui vous invitera à ne pas réécrire la méthode.
(5) protégé
Explication détaillée du code de contrôle pour les autorisations d'accès à la programmation Java
J'ai écrit l'article précédent à l'avance parce que je n'avais pas parlé de l'héritage auparavant.
Vous pouvez simplement considérer protégé comme l'héritage de la classe parent au fils, et d'autres classes non héritées ne sont pas accessibles.
(6) mot-clé final
L'ajout du type de base du mot-clé final signifie que cette variable ne changera pas après l'initialisation. Semblable à la définition C, vous voulez qu'une variable dans ce programme soit cette valeur sans changer. Vous pouvez utiliser final.
classe publique fils {int age = 2; public static void main (String [] args) {final int i = 1; // i = 2; La valeur ne peut plus être modifiée par fils final son = new Son (); // fils = nouveau fils (); // Le fils variable local final ne peut pas être attribué. // il doit être vide et n'utiliser pas une affectation composée // Le fils variable local modifié par final ne peut pas être attribué, il doit être vide ou non alloué à nouveau Son.age = 4; // Bien que la référence soit constante, l'objet lui-même peut être modifié. } void Change (final int c) {// c = this.age; Impossible d'attribuer une nouvelle valeur car la valeur détermine uniquement la référence de l'objet lorsque la méthode passe le paramètre et détermine que la référence d'objet est similaire à ce // âge ++; Ne peut pas être modifié}} Le statique est à l'origine l'initialisation statique, et il est utilisé avec Final pour occuper un espace de stockage qui ne peut pas être modifié.
La finale statique est une constante pendant la période de compilation. Les noms constants sont traditionnellement nommés selon les constantes de c. Tous sont des lettres majuscules et les mots sont séparés par des soulignements.
STATIC FINAL VALEUR_ONE = 1;
Lors de la modification de la méthode finale
classe publique print {final void noudprint () {System.out.println (1); }} classe publique PrintSon étend PRINT {// void noudprint () {} // Impossible de réécrire car il est modifié par le public final static void main (String [] args) {printson ps = new printSon (); Ps.Cannotprint (); }}Il peut être considéré comme une propriété non modifiée (héritage ancestral) que la classe parent exige que la classe d'enfants doit hériter. Le privé est implicitement spécifié comme final, car le privé ne vous donne pas du tout l'héritage. C'est plus privé que de vous donner l'héritage mais de ne pas le modifier.
Soit dit en passant, effacez les autorisations.
Lorsque Final modifie une classe, c'est pour empêcher que cette classe soit héritée.
(7) Héritage et initialisation
Le problème de la commande ici est une question intéressante. Voir des exemples.
classe grand-père {private static int i = print (); private static int print () {System.out.println ("g"); retour 1; }} La classe Père étend grand-père {private static int i = print (); private static int print () {System.out.println ("f"); retour 1; }} La classe publique Son étend Père {private static int i = print (); private static int print () {System.out.println ("s"); retour 1; } public static void main (string [] args) {System.out.println ("premier"); }} Le résultat de l'impression est-il d'abord? Faux.
Bien que la méthode principale soit exécutée, je vois que le fils, qui nécessite une initialisation statique, ne l'a pas, mais le résultat est s, d'abord?
Il y a aussi le problème de l'initialisation. Le fils hérite du père, donc le compilateur chargera le père et initialise i. Si le père hérite du grand-père, alors le compilateur chargera grand-père, similaire à la récursivité.
Le dernier initialisé est le grand-père i.
Le résultat final est donc: G, F, S, d'abord.
Résumer
Ce qui précède est toute l'explication détaillée du code de multiplexage de la programmation Java dans cet article, j'espère que cela sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!