package testPackage;

public class Personne implements Cloneable{

       private String name;

       /**
        * @param nom
        */
       public Personne(String nom) {
              name = nom;
       }

       @Override
       /**
        * cree une representation sous forme de string de l'objet
        * personne
        * @return une chaine de caracteres
        */
       public String toString() {
              return super.toString()+"  -> name = \""+name+"\"";
       }

       /**
        * @param name the name to set
        */
       public void setName(String name) {
              this.name = name;
       }

       /**
        * redéfinition de la méthode clone de la classe Object.
        * C'est la solution la plus cohérente : rendre la class Personne elle-même clonable.
        * Remarquez aussi au passage que nous augmentons la visibilité de la méthode clone 
        * de protected à public, cela 
        * de manière à pouvoir appeler clone depuis la classe Bidule.
        * @see java.lang.Object#clone()
        */
       @Override
       public Personne clone() throws CloneNotSupportedException {
              return (Personne) super.clone(); // on a un seul attribut du type String (objet immuable) super.clone() va donc effectuer un clonage profond
       }


       @Override
       public boolean equals(Object obj) {
              if(obj instanceof Personne){
                     Personne anotherPersonne = (Personne) obj;
                     return name.equals(anotherPersonne.getName()); //égalité logique
              }
              return false;
       }
       /**
        * @return the name
        */
       public String getName() {
              return name;
       }

}