Cours-Gratuit
  • Accueil
  • Blog
  • Cours informatique
home icon Cours gratuits » Cours informatique » Cours programmation » Cours JAVA » Exercices JAVA »

Articles similaires

  • Série d'exercices Java sur la programmation orienté objet POO
  • Exercices Java : Les boucles - somme des carrés - sondage - traingle
  • Exercice polymorphisme JAVA Tour de carte
  • Exercice JAVA opérateur infixé et postfixé
  • Tutoriel Python : notion d’héritage
  • Exercice JAVA modularisation - erreurs fréquentes dans les méthodes
  • Exercice java algorithme programme jeu de puissance 4
  • Exercice opération sur les tableaux JAVA
  • Exercice JAVA héritage et interfaces - primes de risque
  • Exercices JAVA : terminologie, Structure, typage et conversion de type,Opérateurs relationnels
  • Exercice liste chainée générique JAVA - Structures de données abstraites
  • Exercices java programmes - condition - moyenne d'une classe - Tables de vérité

Documents similaires

  • Exercice bureautique pour réviser ensemble

  • Projet de PFE en informatique avec JAVA

  • Cours pour commencer le JAVA

  • Développons en Java avec Eclipse

  • Cours programmation objet et JAVA avec exemples

  • Exercice de bureautique pour débutant

  • Application client serveur de chat avec JAVA

  • Application java sur la gestion de personnel

Exercice JAVA masquage (shadowing) et héritage

Rédigé par GC Team, Publié le 18 Août 2010, Mise à jour le Samedi, 17 Décembre 2022 17:57
Participez au vote ☆☆☆☆☆★★★★★
But:

 Indiquer l'affichage du programme. Attention aux situations de masquage.  

Thème:

 Masquage (Shadowing), Héritage  

Fichiers:

 Alphabet.java

Vous trouverez ci-dessous le programme Alphabet qui implémente la hiérarchie de 3 classes (A, B et C). Indiquez l'affichage du programme (sans l'exécuter). Attention aux situations de shadowing.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
class Alphabet {
 public static void main(String args[]) {
 A[] as = new A[3];
 as[0] = new A(1);
 as[1] = new B(2);
 as[2] = new C(3);

 for (int i = 0; i < as.length; i++) {
 as[i].afficherClasse();
 System.out.println("-----");
 }

 for (int i = 0; i < as.length; i++) {
 as[i].afficherVariables();
 System.out.println("-----");
 }
 }
}

class A {
 protected int a = 5;

 public A(int a) {
 this.a = a;
 }

 public void afficherClasse() {
 System.out.println("Classe A");
 }

 public void afficherVariables() {
 System.out.println("a = " + a);
 }
}

class B extends A {
 protected int b = 6;

 public B(int b) {
 super(2 * b);
 a = b;
 }

 public void afficherClasse() {
 super.afficherClasse();
 System.out.println("Classe B");
 }

 public void afficherVariables() {
 super.afficherVariables();
 System.out.println("b = " + b);
 }
}

class C extends B {
 protected int b = 7;
 protected int c = 8;

 public C(int c) {
 super(3 * c);
 b = c;
 }

 public void afficherClasse() {
 super.afficherClasse();
 System.out.println("Classe C");
 }

 public void afficherVariables() {
 super.afficherVariables();
 System.out.println("c = " + c);
 }
}


L'affichage correct et donné ci-dessous.

Classe A
-----
Classe A
Classe B
-----
Classe A
Classe B
Classe C
-----
a = 1
-----
a = 2
b = 6
-----
a = 9
b = 6
c = 8

La difficulté principale réside dans l'affichage du dernier objet (de type C).

Pourquoi l'attribut b vaut-il 6 et non pas 3 ?

Réponse : à cause du masquage. En effet, si on observe la hiérarchie de classes donnée, on peut remarquer qu'un objet de type C possède en fait deux attributs b : l'un hérité de B et l'autre redéfini dans C (qui masque le premier).

Lorsque la méthode afficherVariables va être invoquée sur l'objet de type C, elle va appeler la méthode afficherVariables de la super-classe (B). Cette dernière va afficher l'attribut b de la super-classe, qui vaut 6.

Pour bien comprendre la nuance, remplacez la méthode afficherVariables de la classe C par la suivante :

public void afficherVariables() {
        super.afficherVariables();
        System.out.println("b (masquant) = " + b);
        System.out.println("c = " + c);
    }

Ré-exécutez le programme. L'affichage devrait alors être le suivant:

Classe A
-----
Classe A
Classe B
-----
Classe A
Classe B
Classe C
-----
a = 1
-----
a = 2
b = 6
-----
a = 9
b = 6
b (masquant) = 3
c = 8
-----

             
             

	     
						
							
					
			
						
				
            
  • Contactez-nous
  • A propos de nous
  • On recrute
  • Rechercher dans le site
  • Politique de confidentialité
  • Droit d'auteur/Copyright
  • Conditions générales d'utilisation
  • Plan du site
  • Accueil
  • Blog
  • Finance et compta.
  • Formations Pro.
  • Logiciels & Apps
  • Organisation
  • Cours informatique
  • Aide à la rédaction
  • Etudes et Metiers
  • Science et Tech
  • Titans de la Tech
id 11354 02