[Précédent]
[Index] | [Enoncé] | [Version imprimable]
[Prochain]

9.6
  Affichage et comparaison d'objets - Corrigé
Niveau 1
 
 
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
119
120
121
122
123
124
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(Object 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(((RectangleColore)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);
            
        }
    
}

                    
                

 


[Précédent]
[Index] | [Enoncé] | [Version imprimable]
[Prochain]