Problème Héritage/Constructeur

Résolu/Fermé
Sken - 5 nov. 2011 à 16:44
 Sken - 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.


2 réponses

KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
5 nov. 2011 à 16:58
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.
1
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.
0