Bonjour tous le monde,
Je souhaite savoir si les variables statiques sont hérité par les classes files d'une classe mère?
Merci de me donné un exemple concret.
Bonjour tous le monde,
Je souhaite savoir si les variables statiques sont hérité par les classes files d'une classe mère?
Merci de me donné un exemple concret.
Responsable Java de Developpez.com (Twitter et Facebook)
Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
--------
Architecte Solution
LinkedIn : https://www.linkedin.com/in/nicolascaudard/
Oui, et les variables non-statiques aussi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 class A { protected static final String MESSAGE = "Bonjour !"; } public class B extends A { public static void main(String[] args) { // variable MESSAGE visible, donc héritée. System.out.println(MESSAGE); } }
N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
Et question alors tant qu'à dire des bêtises. Si je fais la manipulation suivante :
Quel sera la valeur de mon System.out ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 public class A { public static String message = "Bonjour !"; } public class B extends A { public static void main(String[] args) { message = "toto"; new C(); } } public class C { public C() { System.out.println(A.message); } }
Responsable Java de Developpez.com (Twitter et Facebook)
Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
--------
Architecte Solution
LinkedIn : https://www.linkedin.com/in/nicolascaudard/
Voila un exemple qui ressemble un peu à ce que j'ai rencontrer dans un QCM :
j'attend la réponse à la question de Robin56
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 public class A{ static int i = 1; show(){ syso("la valeur de i"+ i); } } } public class B extends A{ int i=1; show(){ syso("la valeur de i"+ i); } } main(String args[]){ A a = new B(); a.show(); }
Merci de votre aide.
Par bonne foi, je réponds sans essayer de lancer l'exemple : cela affichera "toto" (sans les guillemets.)Quel sera la valeur de mon System.out ?
La variable message, variable statique de la classe A, est bel et bien héritée par la classe B. Ce qui signifie que cette variable fait partie du contexte de B, hérité du contexte de A, et donc que B peut lire et écrire dans cette variable qui est à A.
Donc la ligne suivante compile et modifie la variable en question :
S'il n'y avait pas héritage, elle ne compilerait pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part message = "toto";
N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
Responsable Java de Developpez.com (Twitter et Facebook)
Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
--------
Architecte Solution
LinkedIn : https://www.linkedin.com/in/nicolascaudard/
La situation est différente.
Ici la classe B, qui hérite de A, hérite bel et bien de la variable i de la classe A.
Seulement, B définit sa propre variable i, de même nom. Puisqu'elle a le même nom, elle masque la variable i de la classe A.
Le contexte de B ne lui permet donc plus d'accéder à la variable i de la classe A. Seulement à sa propre variable i. Pour accéder à celle de la classe A, elle va devoir faire comme le reste du monde :
En l'occurrence, sa méthode show() n'accède qu'à une variable i, donc dans son contexte, donc celle de B.
Code : Sélectionner tout - Visualiser dans une fenêtre à part A.i
N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
Effectivement j'ai eu ma réponse, donc les variables statiques sont hérité.
si j'ai bien compris parce que j'ai fait le test et j'ai eu le même résultat == toto.
Mais ça contra dit ce qui à était dit au début, tans mieux.
il n'est absolument pas question d'héritage avec les variables static mais de "lien "de nommage: si tu as dans la classe mère une variable statique "visible" elle sera liée à ton code; si dans la classe courante tu définis à nouveau une variable statique de même nom il y aura occultation ("hiding" d'après la norme): le compilateur décide du lien à adopter à la compilation en fonction du type déclaré de l'objet sur lequel on demande la variable. inutile de dire que ce genre de chose est à éviter absolument pour ne pas tomber dans des codes byzantins.
J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
(mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)
Salut,
Tout à fait d'accord avec professeur shadoko qui a tout dit !
Les éléments static ne font pas partie de l'instance donc cela ne peut pas être hérité... C'est juste visible !
a++
Les JLS appellent cela un truc hérité de la classe mère. Que ce soit statique ou non. Que ce soit une variable, une méthode, ou un type imbriqué.
Tous ces trucs-là sont hérités.
Edit : C'est pourtant pas compliqué...
Visible parce qu'hérité du contexte de la classe mère <=> hérité.
À quoi ça sert de discuter de ce qui est hérité ou pas alors qu'on n'a même pas dit ce que ça veut dire, hériter ?
N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
C'est aussi l'impression que j'ai eue pendant longtemps. Mais quand j'ai voulu remplacer l'impression par de la certitude, je suis tombé des nues.
En réalité, plein de choses parlent de l'héritage, en Java et autres, mais c'est bien plus difficile de trouver une définition correcte de ce que c'est, l'héritage. Et encore plus, de ce que ça veut dire hériter d'une variable, une méthode, un type imbriqué.
Face à ce qui devenait une impasse, je me suis tourné vers ce que les JLS appellent "hériter d'une variable, méthode ou type imbriqué."
Je suis ouvert à la discussion, mais même si au début je m'attendais à complètement autre chose, aujourd'hui j'y vois une certaine logique. Il me semble qu'avant je confondais "hériter d'un truc" avec d'autres notions.
N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
En même temps tu m'as demandé ce que je confondais. Quand les choses sont claires, je ne confonds rien, merci.
Non, cette discussion a prouvé que personne ne sait ce que ça veut dire, "hériter d'une variable."
Par conséquent, ça ne sert à rien de demander si des choses sont héritées, puisque, que la réponse soit oui ou non, de toute façon tu ne sais pas à quoi on a répondu oui ou non.
Qu'est-ce que tu veux savoir au juste, à propos des variables statiques et des sous-classes ?
N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager