Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 11/11/2007, à 21:45

x@v

[JAVA]constructeur

Bonjour,
j'ai un problème de constructeur que je ne comprend pas bien ?
Ma super CLass

 package poly;

public class Etudiant {
	String nom;
	String prenom;
	String age;
	public Etudiant(String nom, String prenom, String age)
	{
		this.nom = nom;
		this.prenom = prenom;
		this.age = age;
	}
	public void affiche()
	{
    System.out.println(
    	"Nom : " + nom + "\n" + "Prénom : " + prenom + "\n Age : " + age);
	}
}

et la class hériter qui me pose problème avec ce message d'erreur sur la signature "public EtudiantSportif(String sport)"

Implicit super constructor Etudiant() is undefined. Must explicitly invoke 
 another constructor
package poly;

public class EtudiantSportif extends Etudiant
{
	String sport;
	public EtudiantSportif(String sport)
	{
	this.sport = sport;
	}
	public void affiche()
	{
	super.affiche();
    System.out.println("Sport : " + sport);
	}
}

Merci

Dernière modification par x@v (Le 11/11/2007, à 21:47)


[-- qwerty user --]

Hors ligne

#2 Le 11/11/2007, à 21:50

jAr0d

Re : [JAVA]constructeur

Salut,

Il me semble qu'en Java, quand tu définis un constructeur différent du constructeur par défaut, il faut alors redéfinir le constructeur sans arguments :

 package poly;

public class Etudiant {
    String nom;
    String prenom;
    String age;

    public Etudiant()
    {
    }
    public Etudiant(String nom, String prenom, String age)
    {
        this.nom = nom;
        this.prenom = prenom;
        this.age = age;
    }
    public void affiche()
    {
    System.out.println(
        "Nom : " + nom + "\n" + "Prénom : " + prenom + "\n Age : " + age);
    }
}

Même si ce dernier ne fait rien de particulier. C'est à  confirmer... ça fait très longtemps que je n'ai pas fait de Java :-)


Kubuntu 7.10
Toshiba Satellite A100-788
Linux, plus qu'un OS, une passion...

Hors ligne

#3 Le 11/11/2007, à 21:54

x@v

Re : [JAVA]constructeur

C'est la classe "EtudiantSportif" qui me pose problème.
Un constructeur est implicitement mis pas défault si je n'en définis pas.
C'était peut être dans une vieille version que c'était comme ça.
Pour ma part je me fait un exercice pour bien comprendre le pokymorphisme. Et il me faut trois class...
une héritant de sa super class et une dernière central qui appelle une des deux autres à  travers des variables typés des deux autres qui sont instancié dans les méthode de la class centrale.
Je veux voir les effets du polymorphisme.

Dernière modification par x@v (Le 11/11/2007, à 21:58)


[-- qwerty user --]

Hors ligne

#4 Le 11/11/2007, à 22:09

jAr0d

Re : [JAVA]constructeur

En essayant d'interpréter le message d'erreur, il semblerait que le compilateur ne trouve pas le super constructeur de la classe parente, celui-ci n'étant pas défini.

En effet si tu n'as pas défini de constructeur dans ta classe EtudiantSportif, il en créé un par défaut. Le comportement par défautd de ce constructeur sera d'appeler le constructeur par défaut (sans arguments) de la classe parente, qui n'est donc pas défini.

Essai de faire la modif que je t'ai indiqué plus haut et si ça ne fonctionne pas, alors redéfini le constructeur par défaut de ta classe EtudiantSportif en lui faisant appeler explicitement le constructeur parent qui a été défini :

super("nom", "prenom", "age");

Et vois ce que ça donne.


Kubuntu 7.10
Toshiba Satellite A100-788
Linux, plus qu'un OS, une passion...

Hors ligne

#5 Le 11/11/2007, à 22:36

x@v

Re : [JAVA]constructeur

le constructeur vide ne fait rien, par contre sa fonctionne avec l'appelle du constructeur parent.
Mais du coup sa me complique l'avis pour comprendre le polymorphisme ?
j'ai un Main

package poly;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) 
	{
		// TODO Auto-generated method stub
		GroupeTD td1 = new GroupeTD();
		td1.ajouter(new Etudiant("artot", "xavier", "37"));
		td1.ajouter(new EtudiantSportif());
		td1.afficherListe();
	}
}

puis

package poly;

public class GroupeTD {
	// la classe Etudiant doit être dans le même package pour typer le tableau
	Etudiant[] liste = new Etudiant[30];
	int nbEtudiants = 0;

	public void ajouter(Etudiant e)
	{
		if (nbEtudiants < liste.length)
              liste[nbEtudiants++] = e;
	}
	public void afficherListe()
	{
		for (int i=0;i<nbEtudiants; i++)
			liste[i].affiche();
     }
}

En faite ces 4 fichiers devait m'aider à  comprendre mais sa m'embrouille...
parce que j'ai ma liste qui affiche le sport à  null ?
Nom : artot
Prénom : xavier
Age : 37
Sport : null

Dans cette image on peux voir qu'il instancie
EtudiantSportif("BIDULE",...) Mais je n'arrive pas à  reproduire ce shémas ?
http://xavier.artot.free.fr/Capture.png

Dernière modification par x@v (Le 12/11/2007, à 00:27)


[-- qwerty user --]

Hors ligne