package testPackage;
public class Bidule implements Cloneable {
private int valeur;
private Personne personne;
private int compteur;
public Bidule(int valeur) {
this.valeur = valeur;
personne = new Personne("toto "+valeur);
compteur = 0;
}
@Override
public String toString() {
return super.toString()+" contient -> valeur = "+valeur+" ; personne = "+personne;
}
public void setValeur(int valeur) {
this.valeur = valeur;
}
public void incrementCompteur() {
compteur++;
}
public Personne getPersonne() {
return personne;
}
@Override
public Bidule clone() throws CloneNotSupportedException {
Bidule nouveauBidule = (Bidule) super.clone();
if(this.personne != null){ nouveauBidule.personne = getPersonne().clone();
}
return nouveauBidule;
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Bidule){
Bidule otherBidule = (Bidule) obj;
return valeur == otherBidule.valeur && compteur == otherBidule.compteur && getPersonne().equals(otherBidule.getPersonne());
}
return false; }
public static void main(String[] args) {
Bidule bidule1 = new Bidule(2);
System.out.println("bidule1 = "+bidule1);System.out.println();
bidule1.incrementCompteur();
Bidule bidule2 = new Bidule(4);
System.out.println("bidule2 = "+bidule2);
System.out.println("\n----------clonage de bidule1 dans bidule2------------\nRésultat :\n");
try {
bidule2 = (Bidule) bidule1.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
System.out.println("bidule1 = "+bidule1);
System.out.println("\nbidule2 = "+bidule2);
System.out.println("\nbidule1.equals(bidule2) apres clonage (doit retourne vrai) -> "+bidule1.equals(bidule2)+"\n");
System.out.println("----------manipulation du clone bidule2 sur value : --- bidule2.setValeur(9); ---\nRésultat :\n");
bidule2.setValeur(9);
System.out.println("bidule1 = "+bidule1);
System.out.println("\nbidule2 = "+bidule2);
System.out.println("\nbidule1.equals(bidule2) apres manipulation (doit retourne faux) -> "+bidule1.equals(bidule2)+"\n");
System.out.println("\n\n-----manipulation du clone bidule2 sur personne : --- bidule2.getPersonne().setName(\"bidule\"); ---\nRésultat :\n");
bidule2.getPersonne().setName("bidule");
System.out.println("bidule1 = "+bidule1);
System.out.println("\nbidule2 = "+bidule2);
}
}