Exercice Java : Redéfinition de toString

Exercice java traite le  sujet suivant:

Redéfinition de toString

Examinons ce petit Exercice java:



1. Réaliser une classe PointN permettant de manipuler des points d’un plan à coordonnées entières et repérés par un  nom de type chaîne. On se limitera à un constructeur et à une méthode affiche affichant le nom du point et ses  coordonnées, de manière que les instructions suivantes :

PointN a = new PointN (2, 5, "orig") ;
System.out.print ("a = ") ; a.affiche() ;

fournissent les résultats suivants :

a = Point nomme orig et de coordonnees 2 5

2. Modifier la classe précédente, de manière que les résultats suivants puissent maintenant s’obtenir ainsi (on pourra supprimer la méthode affiche) :

PointN a = new PointN (2, 5, "orig") ;System.out.println ("a = " + a) ;

Question 1
La définition de la classe PointN ne présente pas de difficultés :

class PointN
{ public PointN (int x, int y, String nom)
  { this.x=x ; this.y=y ; this.nom =nom ;
  }
  public void affiche()
  { System.out.println ("Point nomme " + nom
             + " et de coordonnees " + x + " " + y) ;
  }
  private int x, y ;
  private String nom ;
}

Notez qu’il n’est pas nécessaire de recopier au sein de l’objet la valeur de la chaîne représentant le nom du point. On peut se contenter d’en recopier la référence car les objets de type String ne sont pas modifiables.
Question 2
La classe Object, dont dérive toute classe, dispose d’une méthode toString qui, par défaut, affiche le nom de la classe et l’adresse de l’objet concerné. Si nous ne modifions pas notre classe PointN, une instruction telle que :

System.out.println ("a = " + a) ;

appellera cette méthode toString pour permettre à l’opérateur + de convertir a en String ; elle affichera quelque chose comme :

a = PointN@fd7a8b04

Pour obtenir les résultats voulus, il nous suffit en fait de redéfinir de façon appropriée la méthode toString dans notre  classe PointN :

class PointN
{ public PointN (int x, int y, String nom)
  { this.x=x ; this.y=y ; this.nom = new String(nom) ;
  }
  public String toString()
  { String ch = "Je suis un point nomme " + nom
             + " et de coordonnees " + x + " " + y ;
    return ch ;
  }
  private int x, y ;
  private String nom ;
}

Leave a Reply

Your email address will not be published. Required fields are marked *


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>