Préface
Le rappel signifie le rappel. Les personnes qui connaissent la programmation Windows doivent être familiarisées avec les quatre mots "fonction de rappel", mais les programmeurs Java ne le savent peut-être pas grand-chose. "Fonction de rappel" ou "Méthode de rappel" est un concept très important dans la conception et le développement de logiciels. Il est très nécessaire pour les programmeurs (quelle que soit la langue).
Récemment, j'ai appris Java et suis entré en contact avec le mécanisme de rappel (rappel). Lorsque je me suis rencontré pour la première fois, je me sentais assez confus, et les explications pertinentes que j'ai recherchées en ligne venaient de mentionner ou de dire simplement, comme si j'avais défini un rappel. Bien sûr, après avoir compris le rappel, je suis allé lire les différentes explications en ligne, et il n'y avait aucun problème. Cependant, pour moi qui est un débutant, je manque de processus progressif. Ici, je décrirai ma compréhension personnelle du mécanisme de rappel dans l'ordre de superficiel à profond. S'il y a une inappropriation, j'espère que je vous donnerai des conseils!
Avant de commencer, imaginez un scénario: les enfants de la maternelle viennent d'apprendre l'addition dans les 10 ans.
Chapitre 1. L'origine de l'histoire
L'enseignant de la maternelle a écrit une formule "1 + 1 =" sur le tableau noir, et Xiao Ming remplirait les blancs.
Depuis que j'ai appris l'ajout de moins de 10, Xiao Ming peut calculer cette question entièrement par lui-même. Le code pour simuler le processus est le suivant:
classe publique Student {private String name = null; public étudiant (String name) {// todo constructeur généré automatique Stubthis.name = name;} public void setName (String name) {this.name = name;} private int calcadd (int a, int b) {return a + b;} public void fillblank (int a, int b) {int résultat = calcadd (a, a, b); System.out.println (Nom + "Mental Arithmetic:" + A + "+" + B + "=" + Result);}} Lorsque Xiao Ming remplissait les blancs, il a directement calculé le Clacadd et a constaté que le résultat était 2 et a écrit le résultat dans l'espace. Le code de test est le suivant:
Test de classe publique {public static void main (String [] args) {int a =; int b =; étudiant s = new student ("xiao ming"); s.fillblank (a, b);}} Les résultats de l'opération sont les suivants:
L'arithmétique mentale de Xiao Ming: 1 + 1 = 2
Ce processus se fait entièrement par l'objet d'instance de la classe étudiante seul et n'implique pas de mécanisme de rappel.
Chapitre 2. La recherche de problèmes pour les enseignants de la maternelle
Pendant la pause, l'enseignant de la maternelle a soudainement eu un coup de tête et a écrit "168 + 291 =" sur le tableau noir pour laisser Xiao Ming le terminer, puis retourné au bureau.
Fleur Froth! Pourquoi tous les enseignants ne peuvent-ils pas s'entendre avec Xiao Ming? C'est évidemment au-delà des règles, d'accord? À l'heure actuelle, Xiao Ming ne pouvait évidemment pas le compléter par l'arithmétique mentale comme celle ci-dessus. Quand il était confus, Xiao Hong dans la classe a remis une calculatrice qui ne pouvait calculer que l'addition (un profiteur)! ! ! ! Xiao Ming savait comment utiliser une calculatrice, il a donc calculé les résultats via la calculatrice et a terminé les blandos de remplissage.
Le code de la calculatrice est:
Calculatrice de classe publique {public int add (int a, int b) {return a + b;}} Modifiez la classe Student et ajoutez une méthode pour utiliser la calculatrice:
classe publique étudiant {private String name = null; public étudiant (nom de chaîne) {// todo constructeur généré automatique Stubthis.name = name;} public void setName (name de chaîne) {this.name = name;} @ suppresswarning Calculatrice (). Add (a, b);} public void fillblank (int a, int b) {int result = usecalculator (a, b); system.out.println (name + "use calculator:" + a + "+" + b + "=" + result);}} Le code de test est le suivant:
Test de classe publique {public static void main (String [] args) {int a =; int b =; étudiant s = new student ("xiao ming"); s.fillblank (a, b);}} Les résultats de l'opération sont les suivants:
Xiao Ming utilise la calculatrice: 168 + 291 = 459
Le mécanisme de rappel n'a pas été impliqué dans ce processus, mais certains des travaux de Xiao Ming ont été transférés et seront assistés par la calculatrice.
3. Le professeur de maternelle est de retour
Quand j'ai découvert que Xiao Ming avait terminé l'ajout de 3 chiffres, l'enseignant pensait que Xiao Ming était très intelligent et un talent malléable. Il a donc écrit "26549 + 16487 =" sur le tableau noir, demandant à Xiao Ming de terminer les blandos de remplissage avant le cours, puis est retourné au bureau.
Xiao Ming a regardé le petit ami qui s'amusait à l'extérieur de la classe et ne pouvait s'empêcher de se sentir triste. Si vous ne sortez pas pour jouer, cette pause sera ruinée! ! ! ! En regardant la calculatrice que Xiaohong l'a remise, Xiao Ming a élaboré un plan: laissez Xiaohong le faire pour lui.
Xiao Ming a déclaré à Xiaohong que la question était "26549 + 16487 =", puis a souligné l'emplacement spécifique pour remplir les résultats, puis s'est amusé.
Ici, nous n'implémentons pas Xiaohong seul, mais considérons cette calculatrice qui ne peut calculer que l'addition et Xiaohong dans son ensemble, une super calculatrice qui peut calculer les résultats et remplir les blancs. Les paramètres que cette super calculatrice doit passer sont les deux ajouts et la position pour remplir les blancs, et ces contenus doivent être informés à l'avance, c'est-à-dire que Xiao Ming veut exposer une partie de ses méthodes à Xiao Hong. Le moyen le plus simple est de dire ensemble à Xiao Hong et les deux ajouts.
Par conséquent, la méthode ADD du supercalculator doit contenir deux opérandes et une référence à xiao ming lui-même, le code est le suivant:
classe publique Supercalculator {public void add (int a, int b, étudiant xiaoMing) {int result = a + b; xiaoMing.fillblank (a, b, résultat);}} Xiao Ming n'a plus besoin d'arithmétique ou de calculatrice mentale, il n'a donc qu'à avoir une méthode pour demander de l'aide à Xiaohong. Le code est le suivant:
classe publique étudiant {name de chaîne privée = null; étudiant public (nom de chaîne) {// todo constructeur généré automatique Stubthis.name = name;} public void setName (String name) {this.name = name;} public void callhelp (int a, int b) {new SupercalCulator (). Résultat) {System.out.println (Name + "Cherchant pour le calcul de Xiaohong:" + a + "+" + b + "=" + résultat);}} Le code de test est le suivant:
Test de classe publique {public static void main (string [] args) {int a =; int b =; étudiant s = new student ("xiao ming"); s.callhelp (a, b);}} Le résultat en cours est:
Xiao Ming a demandé de l'aide Xiaohong à calculer: 26549 + 16487 = 43036
Le processus d'exécution est: Xiao Ming appelle la méthode ADD de Xiaohong (new Supercalculator ()) via sa propre méthode CallHelp, et fait référence à sa propre référence lors de l'appel.
(ceci) le transmettre en tant que paramètre. Après que Xiaohong ait utilisé la calculatrice pour obtenir le résultat, il a rappelé la méthode Fillblank de Xiao Ming et a rempli le résultat dans l'espace sur le tableau noir.
Lumières et lumières! À ce stade, la fonction de rappel a officiellement fait ses débuts. La méthode Fillblank de Xiao Ming est la fonction de rappel souvent.
De cette façon, on peut voir clairement que Xiao Ming n'a plus besoin d'attendre la fin de l'addition et que le résultat est rempli sur le tableau noir avant qu'il ne puisse s'amuser avec ses amis. Le travail de remplissage dans le flacon est effectué par Xiaohong, la super calculatrice. Les avantages des rappels ont commencé à se refléter.
Chapitre 4. La belle-mère à la porte
Il y a une vieille dame aux cheveux gris à l'entrée de la maternelle. Elle a installé un stand de rue là-bas vendant de la malbouffe qui est presque expirée chaque jour indépendamment du vent et de la pluie. Parce que je suis vieux, mon esprit est un peu confus et je ne peux souvent pas comprendre combien d'argent j'ai gagné. Un jour, elle a accidentellement entendu Xiao Ming se vanter de la façon dont elle a combattu Witts et Courage avec l'enseignante de la maternelle avec l'aide de Xiaohong. Ainsi, ma belle-mère a décidé de trouver la super calculatrice de la petite carte rouge est sa petite aide et de fournir un paquet de bandes épicées de Weilong en récompense. Xiaohong n'a pas pu résister à la tentation et a accepté.
En regardant le code dans le chapitre précédent, nous avons constaté que les paramètres requis par la méthode ADD de la petite calculatrice de la petite carte rouge sont deux variables entières et un objet étudiant, mais la vieille dame n'est pas une étudiante, mais un petit vendeur, donc elle doit apporter des modifications ici. Dans ce cas, il est naturel pour nous de penser à l'héritage et au polymorphisme. Si nous demandons à l'étudiant Xiao Ming et au vendeur de la vieille dame d'hériter d'une classe parentale, alors nous n'avons qu'à transmettre une référence à la classe parent à la super calculatrice de la petite carte rouge.
Cependant, dans une utilisation réelle, compte tenu de l'héritage unique de Java et ne voulant pas exposer trop d'elle-même aux autres, nous utilisons la méthode d'héritage de l'interface pour coopérer avec les classes internes.
En d'autres termes, Xiaohong espère continuer à fournir des services de calcul aux enfants de la classe à l'avenir, et en même temps fournir des services comptables à la vieille dame, et même élargir les affaires des autres à l'avenir. Elle a donc convenu avec tous les clients une méthode de traitement unifié, c'est-à-dire les opérandes dont elle a besoin et comment le faire après avoir terminé le calcul. Xiaohong a fait de cette méthode unifiée une interface et fourni à tout le monde, le code est le suivant:
interface publique dojob {public void fillblank (int a, int b, int résultat);} Parce que l'inspiration est venue de l'aide à Xiao Ming à remplir les blancs, Xiaohong a conservé son intention d'origine et a traité toutes ses affaires comme Fillblank.
Dans le même temps, Xiaohong a modifié sa calculatrice afin qu'elle puisse gérer différentes personnes qui implémentent l'interface Dojob en même temps. Le code est le suivant:
classe publique SuperCalculator {public void add (int a, int b, dojob client) {int result = a + b; client.fillblank (a, b, result);}} Après que Xiao Ming et la vieille dame ont obtenu cette interface, tant qu'elles ont implémenté cette interface, elle équivaut à dire à Xiaohong la façon de gérer les résultats dans un modèle unifié et à utiliser des classes internes comme mentionné précédemment. Le code est le suivant:
Xiao Ming's:
classe publique étudiant {private String name = null; public étudiant (nom de chaîne) {// todo constructeur généré automatique Stubthis.name = name;} public void setName (String name) {this.name = name;} public class dohomework implémente dojob {@OverridePublic VOID Fillblank (int a, int b, int StubSystem.out.println (Name + "Recherche pour le calcul xiaohong:" + a + "+" + b + "=" + résultat);}} public void callhelp (int a, int b) {new Supercalcalculater (). Add (a, b, new DoHomeWork ());}} Vieille dame:
Vendeur de classe publique {Private String name = null; Vendeur public (nom de chaîne) {// TODO Auto-généré au constructeur Stubthis.Name = Name;} public void setName (String Name) {this.name = name;} public class dohomework implémente Dojob {@OverridePublic Void Fillblank (int a, int b, int StubSystem.out.println (Name + "Seeking Aide Xiaohong pour régler les comptes:" + a + "+" + b + "=" + résultat + "meta");}} public void callhelp (int a, int b) {new Supercalcalculater (). Add (a, b, new DoHomework ());}}. La procédure de test est la suivante:
Test de classe publique {public static void main (string [] args) {int a =; int b =; int c =; int d =; étudiant s = new student ("xiao ming"); vendeur s = new vendeur ("grand-mère"); Les résultats de l'opération sont les suivants:
Xiao Ming a demandé de l'aide Xiaohong à calculer: 56 + 31 = 87
La vieille dame demande l'aide de Xiaohong pour régler les comptes: 26497 + 11256 = 37753 Yuan
Les derniers mots
On peut clairement voir que Xiaohong a déjà traité cette question comme une carrière, et vous le saurez en regardant le nom qu'elle a donné à l'interface dojob.
Certaines personnes peuvent demander, pourquoi une vieille dame peut-elle gagner autant d'argent en créant un stand? Y a-t-il un problème avec votre concentration? ! Ce dont nous parlons ici, c'est le mécanisme de rappel! !
Tout ce que je sais, c'est que les affaires de Xiaohong ont continué à se développer plus tard, et avant d'obtenir son diplôme de la maternelle, elle a finalement acheté sa première maison dans sa vie avec l'argent qu'elle a gagné.