Bonjour,
J'ai un problème que je pense de base dont je vois d'ou il vient mais je ne sais pas comment y remédier :
J'ai le modèle suivant : Livre étends Article et Livre posssède un champ de type Personne : dans mon exemple Livre est nommé LivreC3 , Article ArticleC et Personne PersonneC

Classe Livre :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
import java.time.LocalDate;
import java.util.ArrayList;

public class LivreC3 extends ArticleC 
 { 
     private String isbn; 
     private int nbPages; 
     private PersonneC auteur;   Champ auteur de type PersonneC
      
     public LivreC3() 
         { 
             super(); 
         } 
     public LivreC3(int reference,String designation,double 
prix,String isbn,int nbPages) 
         { 
             super(reference,designation,prix); 
             setIsbn(isbn); 
             setNbPages(nbPages); 
         } 
     //Constructeur à ne plus utiliser ne gère pas la liste des oeuvres et utilise variable de classe dans fonction
     public LivreC3(int reference,String designation,double 
    		 prix,String isbn,int nbPages,String nom,String prenom,LocalDate dnaiss) 
    		          {   
    		              super(reference,designation,prix); 
    		              setIsbn(isbn); 
    		              setNbPages(nbPages); 
    		              auteur=new PersonneC();
    		              auteur.setNom(nom);
    		              auteur.setPrenom(prenom);
    		              auteur.setDate_nais(dnaiss);
    		          } 
    
      public LivreC3(int reference,String designation,double 
    		 prix,String isbn,int nbPages,PersonneC auteur) 
    		          {   
    		              super(reference,designation,prix); 
    		              setIsbn(isbn); 
    		              setNbPages(nbPages); 
    		              setAuteur(auteur);
    		          } 
         public String getIsbn() { 
             return isbn;          } 
  
         public void setIsbn(String isbn) { 
             this.isbn = isbn; 
         } 
  
         public int getNbPages() { 
             return nbPages; 
         } 
         public void setNbPages(int nbPages) { 
        	              this.nbPages = nbPages; 
        	          } 
        	   
         public PersonneC getAuteur() { 
        	             return auteur; 
        	          } 
        	   
     /*   public void setAuteur(PersonneC auteur) { 
        	              this.auteur = auteur; 
        	          } */
         public void setAuteur(PersonneC auteur) { 
        	              this.auteur = auteur; 
        	             ArrayList<ArticleC> lst; 
        	          //   lst=new ArrayList<> ();
        	             lst=auteur.getoeuvresList();
        	            if (!lst.contains(this)) 
        	            { 
        	                lst.add(this); 
        	             } 
        	        } 
        
        public String toString() 
        	          {       	            
        	              return super.toString() +
        	               " Nbre Pages : "	  + getNbPages() +
        	              " Auteur : " + getAuteur(); 	                
        	          } 
        	       
        	   }
Classe Article
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
public class ArticleC  
 { 
     private int reference; 
     private String designation; 
     private double prix; 
 
     public ArticleC() 
         { 
             super(); 
         } 
 
         public ArticleC(int reference) 
         { 
             this(); 
             setReference(reference); 
         } 
         public ArticleC(int reference,String designation) 
         { 
             this(reference); 
             setDesignation(designation); 
         } 
 
          public ArticleC(int reference,String designation, 
double prix) 
          { 
             this(reference,designation); 
             setPrix(prix); 
         } 
 
         public int getReference()  
         { 
             return reference; 
         } 
         public void setReference(int reference)  
                  { 
                      this.reference = reference; 
                  } 
 
                  public String getDesignation()  
                  { 
                      return designation; 
                  } 
 
                  public void setDesignation(String designation)  
                  { 
                      this.designation = designation; 
                  } 
 
                  public double getPrix() 
                  { 
                      return prix; 
                  } 
 
                  public void setPrix(double prix)  
                  { 
                      this.prix = prix; 
                  } 
 
                  public String toString() 
                  { 
                      return "Référence : "+ getReference() + " Désignation : " + getDesignation() + 
         " Prix : " + getPrix() + " €"; 
                  } 
 
                  }
Classe Personne :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
import java.time.LocalDate;
import java.util.ArrayList; 
 
 public class PersonneC  
 { 
     private String nom; 
     private String prenom; 
     private LocalDate date_nais; 
     private ArrayList<ArticleC> oeuvresList;
 
         public PersonneC() 
     { 
         super(); 
         oeuvresList=new ArrayList<> ();
     } 
 
     public PersonneC(String n,String p,LocalDate d) 
     { 
         this.nom=n; 
         this.prenom=p; 
         this.date_nais=d; 
     } 
 
     public PersonneC(String n,String p,LocalDate d,int ref,String des) //ajoute ref et des dans liste des oeuvres
     { 
         this.nom=n; 
         this.prenom=p; 
         this.date_nais=d;
         ArticleC oeuvre;
         oeuvre=new ArticleC();
         oeuvre.setReference(ref); 
         oeuvre.setDesignation(des); 
         oeuvresList=new ArrayList<>();
         oeuvresList.add(oeuvre);
     } 
 
     public ArrayList<ArticleC> getoeuvresList()  
     { 
       return oeuvresList; 
     } 
 
     public String getNom()  
     { 
       return nom; 
     } 
 
     public void setNom(String nom)  
     { 
        this.nom = nom; 
     }  
 
     public String getPrenom()  
     { 
       return prenom; 
     } 
     public void setPrenom(String prenom)  
          { 
           this.prenom = prenom; 
          } 
 
          public LocalDate getDate_nais()  
         { 
            return date_nais; 
          } 
 
          public void setDate_nais(LocalDate date_nais)  
          { 
            this.date_nais = date_nais; 
          } 
 
         public String toString() { 
              return prenom  + " Classe PersonneC  " + nom + " " + date_nais; 
          } 
 
      }
A l'exécution :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
public static void main(String[] args) {
		ArticleC a;
	      LivreC3 l,l1;
		DvdC3 d;
        PersonneC p;
 l1=new LivreC3();
        l1.setReference(123);
        l1.setDesignation("Le Pigeon");
        l1.setPrix(20.54);
        l1.setIsbn("1245879215");
        l1.setNbPages(254);
       l1.setAuteur(p=new PersonneC("Zone1","Eric1",LocalDate.of(1980, 12,11),l1.getReference(),l1.getDesignation()));
       System.out.println("il y a " + p.getoeuvresList().size() + " articles(s) dans la liste"); 
        System.out.println("il y a " + p.getoeuvresList() + " articles(s) dans la liste");
Et en résultat :
il y a 2 articles(s) dans la liste
il y a [Référence : 123 Désignation : Le Pigeon Prix : 0.0 €, Référence : 123 Désignation : Le Pigeon Prix : 20.54 € Nbre Pages : 254 Auteur : Eric1 Classe PersonneC Zone1 1980-12-11] articles(s) dans la liste

Et là ce trouve le problème il me compte 2 articles alors que j'en ai créé qu'un.
Je pense que le problème vient de :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
l1.setAuteur(p=new PersonneC("Zone1","Eric1",LocalDate.of(1980, 12,11),l1.getReference(),l1.getDesignation()));
qui utilise ce constructeur de Personne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
public PersonneC(String n,String p,LocalDate d,int ref,String des) //ajoute ref et des dans liste des oeuvres
     { 
         this.nom=n; 
         this.prenom=p; 
         this.date_nais=d;
         ArticleC oeuvre;
         oeuvre=new ArticleC();
         oeuvre.setReference(ref); 
         oeuvre.setDesignation(des); 
         oeuvresList=new ArrayList<>();
         oeuvresList.add(oeuvre);
     }
qui ajoute dans "oeuvresList" statique "oeuvre"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
 ArticleC oeuvre;
         oeuvre=new ArticleC();
         oeuvre.setReference(ref); 
         oeuvre.setDesignation(des); 
         oeuvresList=new ArrayList<>();
         oeuvresList.add(oeuvre);
puis la méthode setAuteur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
public void setAuteur(PersonneC auteur) { 
        	              this.auteur = auteur; 
        	             ArrayList<ArticleC> lst; 
        	          //   lst=new ArrayList<> ();
        	             lst=auteur.getoeuvresList();
        	            if (!lst.contains(this)) 
        	            { 
        	                lst.add(this); 
        	             } 
        	        }
rajoute elle aussi dans la liste lst variable locale auteur de type Personne, c'est pour ca que le compte est à 2.
Petite modif à mon message je viens de voir que si je rajoute pas à la liste classique le résultat est bon :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 public PersonneC(String n,String p,LocalDate d,int ref,String des) //ajoute ref et des dans liste des oeuvres
     { 
         this.nom=n; 
         this.prenom=p; 
         this.date_nais=d;
         ArticleC oeuvre;
         oeuvre=new ArticleC();
         oeuvre.setReference(ref); 
         oeuvre.setDesignation(des); 
         oeuvresList=new ArrayList<>();
      //   oeuvresList.add(oeuvre);   */    ici ligne en commentaire je ne rajoute pas à l a liste statique    
     }
mais si je rajpute un autre livre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
 l1=new LivreC3();
        l1.setReference(124);
        System.out.println("ref = " + l1.getReference());
        l1.setDesignation("Le Pigeon Voyageur");
        l1.setPrix(28.54);
        l1.setIsbn("1245879217");
        l1.setNbPages(275);
        l1.setAuteur(p=new PersonneC("Zone2","Eric2",LocalDate.of(1980, 12,11),l1.getReference(),l1.getDesignation()));
 
        System.out.println("il y a (2ème Livre)" + p.getoeuvresList() + " articles(s) dans la liste"); 
        System.out.println("il y a (2ème Livre) " + p.getoeuvresList().size() + " articles(s) dans la liste");
Le résultat est eronné soit tjrs un article :

il y a 1 articles(s) dans la liste
il y a [Référence : 123 Désignation : Le Pigeon Prix : 20.54 € Nbre Pages : 254 Auteur : Eric1 Classe PersonneC Zone1 1980-12-11] articles(s) dans la liste
ref = 124
il y a (2ème Livre)[Référence : 124 Désignation : Le Pigeon Voyageur Prix : 28.54 € Nbre Pages : 275 Auteur : Eric2 Classe PersonneC Zone2 1980-12-11] articles(s) dans la liste
il y a (2ème Livre) 1 articles(s) dans la liste

Voilà j'espère avoir été assez clair si quelqu'un pouvait m'aider MERCI