Posez votre question Signaler

Problème Héritage/Constructeur [Résolu]

Sken - Dernière réponse le 5 nov. 2011 à 18:16
Bonjour,
Je réalise une classe TesteBanque pour tester des fonctions de banque crées auparavant.
Voici mon code :
import java.io.IOException;
import java.util.Scanner;
public class TesteBanque {
public static Client LireClient() throws IOException{
System.out.print("Nom :");
Scanner a= new Scanner(System.in);
String n = a.nextLine();
System.out.print("Prénom :");
Scanner b= new Scanner(System.in);
String p = b.nextLine();
System.out.print("Adresse :");
Scanner c= new Scanner(System.in);
String ad = c.nextLine();
System.out.print("Carte d'Identité :");
Scanner d= new Scanner(System.in);
String ca = d.nextLine();
System.out.print("Numéro de téléphone :");
long t=StdInput.readlnLong();
System.out.println("Vous etes le client : "+n+" "+p+" habitant le "+ad+" carte :"+ca+" téléphone :"+t);
return new Client(n,p,ca,ad,t);
}
public static Directeur LireDirecteur() throws IOException{
System.out.print("Nom :");
Scanner a= new Scanner(System.in);
String n = a.nextLine();
System.out.print("Prénom :");
Scanner b= new Scanner(System.in);
String p = b.nextLine();
System.out.print("Adresse :");
Scanner c= new Scanner(System.in);
String ad = c.nextLine();
System.out.print("Carte d'Identité :");
Scanner d= new Scanner(System.in);
String ca = d.nextLine();
System.out.print("Numéro de téléphone :");
long t=StdInput.readlnLong();
System.out.println("Vous etes le Directeur : "+n+" "+p+" habitant le "+ad+" carte :"+ca+" téléphone :"+t);
return new Directeur(n,p,ca,ad,t);
}
public static Personne LirePersonne() throws IOException{
System.out.print("Nom :");
Scanner a= new Scanner(System.in);
String n = a.nextLine();
System.out.print("Prénom :");
Scanner b= new Scanner(System.in);
String p = b.nextLine();
System.out.print("Adresse :");
Scanner c= new Scanner(System.in);
String ad = c.nextLine();
System.out.print("Carte d'Identité :");
Scanner d= new Scanner(System.in);
String ca = d.nextLine();
System.out.print("Numéro de téléphone :");
long t=StdInput.readlnLong();
System.out.println("Vous etes la personne : "+n+" "+p+" habitant le "+ad+" carte :"+ca+" téléphone :"+t);
return new Personne(n,p,ca,ad,t);
}
public static void main(String[] args) throws IOException{
Personne p = LirePersonne();
System.out.print("Numéro de téléphone");
long tel=StdInput.readlnLong();
p.ChangerTéléphone(tel);
Directeur d = LireDirecteur();
Agence A = new Agence(d);
Client C1 = LireClient();
Client C2 = LireClient();
Client C3 = LireClient();
Client C4 = LireClient();
A.AjouterClient(C1);
A.AjouterClient(C2);
A.AjouterClient(C3);
A.AjouterClient(C4);
}
}
Lorsque je crée seulement une nouvelle personne p, ça marche bien, mais quand je rajoute l'instruction pour créer un Directeur et plusieurs Clients, je reçois le message d'erreur suivant :
TesteBanque.java:31: cannot find symbol
symbol : constructor Client(java.lang.String,java.lang.String,java.lang.String,java.lang.String,long)
location : class Client
return new Client(n,p,ca,ad,t);
et le meme message d'erreur pour Directeur.
Les classes Directeur et Client héritent de Personne et redéfinissent son constructeur. Voilà les constructeurs :
public Personne(String n, String p, String a, String c, long t) throws IOException{
this.nom=n;
this.prénom=p;
this.adresse=a;
this.cartedidentité=c;
this.téléphone=t;
}
public Client(String m, String n, String o, String p, int port) throws IOException{
super(m,n,o,p,port);
}
public Directeur(String w, String x, String y, String z, int cell) throws IOException{
super(w,x,y,z,cell);
}
Les classes Client et Directeur compilent bien séparément.
Merci d'avance pour votre aide.
Lire la suite 

Problème Héritage/Constructeur »

2 réponses
Réponse
+1
moins plus
Lorsque tu fais un super dans une classe fille, la classe mère doit avoir le constructeur avec les même types. Or tu as Personne(String n, String p, String a, String c, long t) et tu utilises Client(String m, String n, String o, String p, int port) idem pour Directeur.
Change ton long en int, ou tes int en long pour que les constructeurs coïncident.

Remarque : System.in est unique, donc il est inutile de créer plusieurs objets Scanner sur System.in, tu peux directement faire un Scanner clavier = new Scanner(System.in), et ensuite faire tout tes nextLine avec clavier.nextLine().
Attention : après avoir fait clavier.nextInt() ou clavier.nextLong(), tu dois appeller un clavier.nextLine() pour vider les caractères '\r' et '\n' de fin de ligne.
Ajouter un commentaire
Réponse
+0
moins plus
Merci beaucoup!

Oui les erreurs toutes bêtes comme ça quand on a le nez dans son code, on les voit pas forcément.

Merci en tt cas.
Ajouter un commentaire
Ce document intitulé « Problème Héritage/Constructeur » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?