Cet article traite d'un concept de base dans le champ de concept axé sur les objets Java (variables des membres cachés)
Avant de discuter de ce problème, examinons un morceau de code très simple. Quel est le résultat des données de la méthode?
/ ** * @author Hollis 17/9/27. * / public class fieldOverrid {public static void main (String [] args) {sub c1 = new sub (); System.out.println ("C1.S:" + C1.s); System.out.println ("C1.S:" + C1.s); System.out.println ("c1.say:" + c1.say ()); Super c2 = new sub (); System.out.println ("C2.S:" + C2.S); System.out.println ("C2.S:" + C2.S); }} classe super {string s = "super"; String Says () {return "Hello Super"; }} class Sub étend super {string s = "sub"; String says () {return "Hello sub"; }}Résultat de sortie:
c1.s: sub c1.say: Bonjour sous C2.S: Super C2.Say: Bonjour sous
Est-ce la même chose que vous le pensez? Si c'est la même chose, vous n'avez pas à continuer de lire. Parce que ce n'est pas difficile, sachez-le.
Réécrire en java
Dans une compréhension approfondie de la réécriture et de la surcharge en Java, nous avons introduit:
Dans le cas où il existe deux méthodes avec le même nom et la même liste de paramètres dans la sous-classe de Java et la classe parent. Puisqu'ils ont la même signature de méthode, les nouvelles méthodes dans la sous-classe remplaceront les méthodes d'origine dans la classe parent.
Auparavant parce que Java a réécrit des méthodes dans l'héritage, cela reflète également le polymorphisme dynamique de Java.
Les variables des membres peuvent-elles être réécrites en Java?
L'introduction de réécriture Java ci-dessus indique clairement que la réécriture fait référence à la méthode. Les variables des membres ne sont pas mentionnées. Grâce à l'exemple ci-dessus, nous pouvons réellement constater que les variables des membres n'ont pas été réécrites.
Par conséquent, en Java, les variables des membres ne seront pas réécrites. Voici un autre mot: cachez.
Cachette des variables membres en Java
Définition des domaines cachés dans la documentation Java:
Au sein d'une classe, un champ qui a le même nom qu'un champ dans la superclasse cache le champ de la superclasse, même si leurs types sont différents. Dans la sous-classe, le champ de la superclasse ne peut pas être référencé par son nom simple. Au lieu de cela, le champ doit être accessible via Super. D'une manière générale, nous ne recommandons pas de masquer les champs car il rend le code difficile à lire.
Traduit en chinois:
Dans une classe, si les variables membre de la sous-classe ont le même nom que les variables membre dans la classe parent, alors même s'ils ont des types différents, ils n'ont que le même nom. Les variables membres dans la classe parent sont cachées. Dans les sous-classes, les variables membres de la classe parent ne sont pas accessibles simplement par référence. Au lieu de cela, les variables membre cachées par la classe parent doivent être obtenues à partir de la référence à la classe parent. De manière générale, nous ne recommandons pas de cacher les variables des membres car cela rendra le code difficile à lire.
En fait, en termes simples, la sous-classe n'écrasera pas les variables membre qui écrasent la classe parent, de sorte que l'accès aux variables membre ne peut pas être accessible en utilisant des méthodes de polymorphisme.
Comment accéder aux variables des membres cachés
En fait, à travers les exemples précédents et l'introduction aux variables des membres tout à l'heure, vous avez déjà connu comment accéder aux variables des membres cachés. Il s'agit d'utiliser la référence de la classe parent pour accéder aux variables membres, telles que Super c2 = new Sub(); System.out.println(" c2.s : " + c2.s);。 Ou utiliser System.out.println(((Super)c1).s); .
Résumer
Ce qui précède est la réécriture des méthodes de Java et la cachette des variables membres qui vous sont présentées par l'éditeur. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!