"Surchage" de Constructeur
Bonjour à tous et bon confinement...
J'ai une classe avec deux constructeurs :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
public class Article {
private String ref;
private String des;
protected double prix;
private static int nbInstances;
//Constructeurs
public Article() {
ref="";
des="";
prix=0;
nbInstances++;
}
public Article(String ref,String des, double prix) {
this.ref=ref;
this.des=des;
this.prix=prix;
nbInstances++;
}
} |
et une autre classe Livre dérivée de Article :
Code:
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
|
public class Livre extends Article{
private long ISBN;
private short nbre_pages;
private String Auteur;
//Constructeurs
public Livre() {
super();
ISBN=0;
nbre_pages=0;
Auteur="";
}
Article a=new Article();
public Livre(String ref,String des,double prix,long ISBN,short nbre_pages,String Auteur) {
a.setref(ref);
a.setdes(des);
this.prix=prix;
//super();
this.ISBN=ISBN;
this.nbre_pages=nbre_pages;
this.Auteur=Auteur;
} |
LE 1er constructeur fait appel au constructeur de la super classe Article : super(), mais le second j'ai été obligé de créer une instance de Article a,pour pouvoir avoir access aux accesseurs (get et set) d'une part et aussi reécrire :
Code:
1 2 3 4
|
a.setref(ref);
a.setdes(des);
this.prix=prix; |
au lieu de récupérer le constructeur de la super classe (le deuxième) :
Code:
1 2 3 4 5 6 7
|
public Article(String ref,String des, double prix) {
this.ref=ref;
this.des=des;
this.prix=prix;
nbInstances++;
} |
avec l'instruction
Tout cela fonctionne correctement sauf que si j'utilise :
Code:
1 2 3 4 5 6 7
|
public Livre(String ref,String des,double prix,long ISBN,short nbre_pages,String Auteur) {
super();
this.ISBN=ISBN;
this.nbre_pages=nbre_pages;
this.Auteur=Auteur;
} |
Je n'aurai pas acces aux ref,des et prix.Ma question est de savoir comment dans un cas similaire pouvoir réutiliser un constructeurs d'une super classe sans avoir quasiment à tout réécrire ?Est ce possible ? Est ce que ma façon d e faire est correcte et n'y a t il pas d'autres solutions sans avoir a créer une instance de la super classe ?
Merci si vous avez des idées