OVH Cloud OVH Cloud

constructor

10 réponses
Avatar
JavaBlues
Bonjour,

Je suis nouveau dans le monde Java, alors soyez indulgent avec moi....
Voici mon problème:

En supposant que Employe soit une sous classe de Personne... j'ai ceci:

Personne p = new Personne ("Dupont", "Jean");
Employe e = new Employe ("Durand", "Julien", 10000);
p = e; // autoirsé car Employe = sous classe de Personne

Dans la définition des classes Personne et Employe
comment se présente le constructeur et comment se présente l'entête de la
sous classe Employe ?

Je suppose que je doit avoir qq ch comme:

class Personne {
static String nom, prenom;
...

public Personne(string nom, String Prenom) {
this.nom = nom;
this.prenom = prenom
}
}

et pour Employe

class Employe extends Personne {
Static int salaire;
...

public Employe (int salaire) {
this.salaire = salaire;
}
}

===> mais j'ai des erreurs. Pouvez-vous me donner les corrections.
Merci.

10 réponses

Avatar
Miguel Moquillon
Le Fri, 29 Oct 2004 15:11:33 +0200, JavaBlues a écrit :
Je suppose que je doit avoir qq ch comme:

class Personne {
static String nom, prenom;
...

public Personne(string nom, String Prenom) {
this.nom = nom;
this.prenom = prenom
}
}

et pour Employe

class Employe extends Personne {
Static int salaire;
...

public Employe (int salaire) {
this.salaire = salaire;
}
}

===> mais j'ai des erreurs. Pouvez-vous me donner les corrections.
Merci.


Erreurs : les champs nom, prenom et salaire ne doivent pas être static
(donc variables de classe) si ils sont attachés au objets et non à la
classe.
De plus, tu as oublié des informations dans le constructeur d'Employe.
N'oublies pas non plus de spécifier la visibilité à "public" de tes
classes si tu veux qu'elles soient utilisable en dehors du package.

Donc:
public class Personne {
protected String nom, prenom;

public Personne(String nom, String prenom) {
this.nom = nom;
this.prenom = prenom;
}

...
}

public Employe extends Personne {
protected double salaire;

public Employe(String nom, String prenom, double salaire) {
super(nom, prenom);
this.salaire = salaire;
}

...
}

Avatar
Kupee
JavaBlues wrote:
Bonjour,

Je suis nouveau dans le monde Java, alors soyez indulgent avec moi....
Voici mon problème:

En supposant que Employe soit une sous classe de Personne... j'ai ceci:

Personne p = new Personne ("Dupont", "Jean");
Employe e = new Employe ("Durand", "Julien", 10000);
p = e; // autoirsé car Employe = sous classe de Personne

Dans la définition des classes Personne et Employe
comment se présente le constructeur et comment se présente l'entête de la
sous classe Employe ?

Je suppose que je doit avoir qq ch comme:

class Personne {
static String nom, prenom;
...

public Personne(string nom, String Prenom) {
this.nom = nom;
this.prenom = prenom
}
}

et pour Employe

class Employe extends Personne {
Static int salaire;
...

public Employe (int salaire) {
this.salaire = salaire;
}
}


Ta classe employée je dirais plutot ca

class Employe extends Personne {
Static int salaire;
...

public Employe (String nom, String Prenom,int salaire) {
super(nom,prenom);
this.salaire = salaire;
}
}

En effet une classe doit toujours appeler un constructeur de sa classe
parente ou un autre constructeur d'elle même (mais toujours pour aboutir
a la classe parente au bout du compte).
Ca doit se faire a la premiere ligne de tes constructeurs. Si tu ne le
fait pas il appellera le constructeur sans paramètre de la classe
parente, a condition qu'il y en ait un (sinon il y aura une erreur)

Avatar
JavaBlues
Merci à vous !!
"JavaBlues" a écrit dans le message de news:
4182418c$0$15723$
Bonjour,

Je suis nouveau dans le monde Java, alors soyez indulgent avec moi....
Voici mon problème:

En supposant que Employe soit une sous classe de Personne... j'ai ceci:

Personne p = new Personne ("Dupont", "Jean");
Employe e = new Employe ("Durand", "Julien", 10000);
p = e; // autoirsé car Employe = sous classe de Personne

Dans la définition des classes Personne et Employe
comment se présente le constructeur et comment se présente l'entête de la
sous classe Employe ?

Je suppose que je doit avoir qq ch comme:

class Personne {
static String nom, prenom;
...

public Personne(string nom, String Prenom) {
this.nom = nom;
this.prenom = prenom
}
}

et pour Employe

class Employe extends Personne {
Static int salaire;
...

public Employe (int salaire) {
this.salaire = salaire;
}
}

===> mais j'ai des erreurs. Pouvez-vous me donner les corrections.
Merci.




Avatar
JavaBlues
Bon j'ai essayé mais j'ai encore un problème.
Voici la source:

public class ClassEx2 {
public static void main(String args[]) {
...
}
}
class Personne { ==> je ne peux la déclarer public
protected String nom;
protected String prenom;

public Personne(String nom, String prenom) {
this.nom = nom;
this.prenom = prenom;
}

}

class Employe extends Personne{ ==> je ne peux la déclarer public
protected double salaire;

public Employe (String nom, String Prenom, double salaire) {
super(nom,prenom); ==> ici erreur "cannot reference prenom before
supertype constructor has been called"
this.salaire = salaire;
}

}

Cette source se trouve dans un fichier appelé ClassEx2.
Merci.

"JavaBlues" a écrit dans le message de news:
4182418c$0$15723$
Bonjour,

Je suis nouveau dans le monde Java, alors soyez indulgent avec moi....
Voici mon problème:

En supposant que Employe soit une sous classe de Personne... j'ai ceci:

Personne p = new Personne ("Dupont", "Jean");
Employe e = new Employe ("Durand", "Julien", 10000);
p = e; // autoirsé car Employe = sous classe de Personne

Dans la définition des classes Personne et Employe
comment se présente le constructeur et comment se présente l'entête de la
sous classe Employe ?

Je suppose que je doit avoir qq ch comme:

class Personne {
static String nom, prenom;
...

public Personne(string nom, String Prenom) {
this.nom = nom;
this.prenom = prenom
}
}

et pour Employe

class Employe extends Personne {
Static int salaire;
...

public Employe (int salaire) {
this.salaire = salaire;
}
}

===> mais j'ai des erreurs. Pouvez-vous me donner les corrections.
Merci.




Avatar
Kupee
JavaBlues wrote:
Bon j'ai essayé mais j'ai encore un problème.
Voici la source:

public class ClassEx2 {
public static void main(String args[]) {
...
}
}
class Personne { ==> je ne peux la déclarer public
protected String nom;
protected String prenom;

public Personne(String nom, String prenom) {
this.nom = nom;
this.prenom = prenom;
}

}

class Employe extends Personne{ ==> je ne peux la déclarer public
protected double salaire;

public Employe (String nom, String Prenom, double salaire) {
super(nom,prenom); ==> ici erreur "cannot reference prenom before
supertype constructor has been called"
this.salaire = salaire;
}

}

Cette source se trouve dans un fichier appelé ClassEx2.
Merci.


Tout simplement en général on ne met qu'une classe par fichier, le
fichier doit porter le nom de ta classe. Donc là tu auras 3 fichiers
java, et tu pourras les mettre public

Avatar
Black Myst
JavaBlues wrote:

class Employe extends Personne{ ==> je ne peux la déclarer public
protected double salaire;

public Employe (String nom, String Prenom, double salaire) {
super(nom,prenom); ==> ici erreur "cannot reference prenom before
supertype constructor has been called"
Erreur de majuscule ... Prenom != prenom

this.salaire = salaire;
}

}



Avatar
JavaBlues
Bien vu pour la majuscule !!
Sinon, c'est dommage qu'on ne puisse avoir qu'une classe public dans un
fichier!
"JavaBlues" a écrit dans le message de news:
41825afb$0$1420$
Bon j'ai essayé mais j'ai encore un problème.
Voici la source:

public class ClassEx2 {
public static void main(String args[]) {
...
}
}
class Personne { ==> je ne peux la déclarer public
protected String nom;
protected String prenom;

public Personne(String nom, String prenom) {
this.nom = nom;
this.prenom = prenom;
}

}

class Employe extends Personne{ ==> je ne peux la déclarer public
protected double salaire;

public Employe (String nom, String Prenom, double salaire) {
super(nom,prenom); ==> ici erreur "cannot reference prenom before
supertype constructor has been called"
this.salaire = salaire;
}

}

Cette source se trouve dans un fichier appelé ClassEx2.
Merci.

"JavaBlues" a écrit dans le message de news:
4182418c$0$15723$
Bonjour,

Je suis nouveau dans le monde Java, alors soyez indulgent avec moi....
Voici mon problème:

En supposant que Employe soit une sous classe de Personne... j'ai ceci:

Personne p = new Personne ("Dupont", "Jean");
Employe e = new Employe ("Durand", "Julien", 10000);
p = e; // autoirsé car Employe = sous classe de Personne

Dans la définition des classes Personne et Employe
comment se présente le constructeur et comment se présente l'entête de
la


sous classe Employe ?

Je suppose que je doit avoir qq ch comme:

class Personne {
static String nom, prenom;
...

public Personne(string nom, String Prenom) {
this.nom = nom;
this.prenom = prenom
}
}

et pour Employe

class Employe extends Personne {
Static int salaire;
...

public Employe (int salaire) {
this.salaire = salaire;
}
}

===> mais j'ai des erreurs. Pouvez-vous me donner les corrections.
Merci.








Avatar
Yogo
"JavaBlues":
Bien vu pour la majuscule !!
Sinon, c'est dommage qu'on ne puisse avoir qu'une classe public dans un
fichier!


Tu peux déclarer les classes Personne et Employe à l'intérieur de ta classe
ClassEx2 (inner classes). Ensuite tu peux créer des instances de ces classes
en dehors du package comme ça:

ClassEx2.Personne p = new ClassEx2().new Personne();

Sinon, pour les variables nom, prenom etc. je pense que private serait mieux
que protected.


Yogo

Avatar
Bruno Jouhier
Tu peux déclarer les classes Personne et Employe à l'intérieur de ta
classe ClassEx2 (inner classes). Ensuite tu peux créer des instances de
ces classes en dehors du package comme ça:

ClassEx2.Personne p = new ClassEx2().new Personne();


Il vaut mieux déclarer l'inner class "static" et l'instancier comme:
ClassEx2.Personne p = new ClassEx2.Personne();
Ca évite d'allouer un objet ClassEx2 inutilement.


Sinon, pour les variables nom, prenom etc. je pense que private serait
mieux que protected.


Yogo




Avatar
Kupee
JavaBlues wrote:
Bien vu pour la majuscule !!
Sinon, c'est dommage qu'on ne puisse avoir qu'une classe public dans un
fichier!


Non au contraire, ca permet de découper ton code, de pas avoir des
fichiers énormes, et surtout de développer a plusieurs sur le même
projet sans trop interférer