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

Articles similaires

  • Exercice JAVA modularisation - erreurs fréquentes dans les méthodes
  • Python : comment programmer les classes
  • Tutoriel Python : notion d’héritage
  • Exercice java abstract et final Trouver les erreurs dans une hiérarchie de classes
  • Tutoriel Python : tout savoir sur le type Boolean
  • Exercices JAVA : terminologie, Structure, typage et conversion de type,Opérateurs relationnels
  • Exercice java programme affiche un sapin décoré de guirlandes
  • Tutoriel Python : définir les attributs
  • Tutoriel Python : opérateurs de comparaison
  • Série d'exercices Java sur la programmation orienté objet POO
  • Exercice JAVA masquage (shadowing) et héritage
  • Exercices Java : Les boucles - somme des carrés - sondage - traingle

Documents similaires

  • Application Excel pour la gestion de réservation des objets

  • Cours Programmation Objets en PHP

  • Email application JAVA code source

  • Documentation pour apprendre les tests et Junit

  • Cours avec exercices corrigés pour débuter en C++

  • Code source en Java sur la gestion étudiant

  • All bootstrap classes with description [Eng]

  • Code source mini projet de compilateur basic en langage C

Exercice affichage et comparaison d'objets - toString, equals

Rédigé par GC Team, Publié le 17 Août 2010, Mise à jour le Lundi, 31 Août 2020 18:25
Participez au vote ☆☆☆☆☆★★★★★

But:

Définition des méthodes toString et equals dans une hiérarchie de classes

Thème:

toString, equals

Programmer la hiérarchie de classes "Rectangle coloré héritant de Rectangle" (vue en cours) en obéissant aux contraintes suivantes :

  • La classe Rectangle possède les attributs double largeur et hauteur.
  • La classe RectangleColore hérite de Rectangle et possède un attribut couleur de type String
  • Le code résultant doit pouvoir être testé avec le programme principal suivant :
  • 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
    
    class ToStringEq
    {
    
        public static void main(String[] args)
            {
                System.out.println("Test 1 :");
                Rectangle rect = new Rectangle(12.5, 4.0);
                System.out.println(rect);
                System.out.println();
    
                System.out.println("Test 2: ");
                // le type de rect1 est RectangleColore 
                // l'objet contenu dans rect1 est de type RectangleColore
                RectangleColore rect1 = new RectangleColore(12.5, 4.0, "rouge");
                System.out.println(rect1);
                System.out.println();
    
                System.out.println("Test 3 :");
    
                // le type de rect2 est Rectangle 
                // l'objet contenu dans rect2 est de type RectangleColore
                Rectangle  rect2 = new RectangleColore(25.0/2, 8.0/2, new String("rouge"));
                System.out.println(rect2);
    
                System.out.println (rect1.equals(rect2)); // 1.
                System.out.println (rect2.equals(rect1)); // 2.
                System.out.println(rect1.equals(null));   // 3.
                System.out.println (rect.equals(rect1));  // 4.
                System.out.println (rect1.equals(rect));  // 5.
            }
    }

     

  • et produire alors la sortie :
    Test 1 :
    Rectangle : 
     largeur = 12.5
     hauteur = 4.0
    
    Test 2: 
    Rectangle : 
     largeur = 12.5
     hauteur = 4.0
     couleur = rouge
    
    Test 3 :
    Rectangle : 
     largeur = 12.5
     hauteur = 4.0
     couleur = rouge
    true
    true
    false
    false
    false
    
  • Les méthodes toString et equals nécessaires ne doivent pas comporter de duplication de code.

 

Fichiers:

ToStringEq.java

Les méthodes toString et equals redéfinissent (masquent) celles héritées de Object. Les tests fournis montrent qu'elles fonctionnent de façon polymorphique (affichage de rect2 et ligne commentée .2 dans la séquence "Test 3 :"). Les points auxquels il fallait être attentifs sont commentés dans la solution ci-dessous :

 

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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
class ToStringEq
{

    public static void main(String[] args)
        {
            System.out.println("Test 1 :");
            Rectangle rect = new Rectangle(12.5, 4.0);
            System.out.println(rect);
            System.out.println();

            System.out.println("Test 2: ");
            // le type de rect1 est RectangleColore 
            // l'objet contenu dans rect1 est de type RectangleColore
            RectangleColore rect1 = new RectangleColore(12.5, 4.0, "rouge");
            System.out.println(rect1);
            System.out.println();

            System.out.println("Test 3 :");

            // le type de rect2 est Rectangle 
            // l'objet contenu dans rect2 est de type RectangleColore
            Rectangle  rect2 = new RectangleColore(25.0/2, 8.0/2, new String("rouge"));
            System.out.println(rect2);

            System.out.println (rect1.equals(rect2)); // 1.
            System.out.println (rect2.equals(rect1)); // 2.
            System.out.println(rect1.equals(null));   // 3.
            System.out.println (rect.equals(rect1));  // 4.
            System.out.println (rect1.equals(rect));  // 5.
        }
}


class Rectangle 
{
    private double largeur;
    private double hauteur;

    public Rectangle(double uneLargeur, double uneHauteur)
        {
            largeur = uneLargeur;
            hauteur = uneHauteur;

        }

    public boolean equals(Object autreRect)
        {
            // permet de passer correctement la ligne commentée .3 du test 3:
            if (autreRect == null)
                return false;
            else
                // garantit que l'on compare bien des
                // objet de même classe
                if (autreRect.getClass() != getClass())
                    return false;
                else
                {
                    // procède à la comparaison attribut par
                    // attribut
                    return (
                        // Ne pas oublier le transtypage ici
                        (largeur == ((Rectangle)autreRect).largeur)
                        &&
                        hauteur == ((Rectangle)autreRect).hauteur);
                }

        }
    public String toString()
        {
            return "Rectangle : \n "
                + "largeur = " + largeur + "\n hauteur = " + hauteur;
        }

}


class RectangleColore  extends Rectangle 
{
    private String couleur;

    public RectangleColore(double uneLargeur, double uneHauteur, String uneCouleur)
        {
            super(uneLargeur, uneHauteur);
            couleur = uneCouleur;
        }


    public boolean equals(RectangleColore autreRectColore)
        {
            if (autreRectColore == null){
                return false;
            }

            else if (autreRectColore.getClass() != getClass())
            {
                return false;
            }

            else
            {
                // Réutilisation du equals de la super-classe
                // pour éviter toute duplication de code
                return (super.equals(autreRectColore) &&
                        couleur.equals(autreRectColore.couleur)
                        );
                    }


        }
    public String toString()
        {
            // Réutilisation de toString de la super-classe
            // pour éviter toute duplication de code
            return (super.toString() + "\n couleur = " + couleur);

        }

}

 

 

  • 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