IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Problème d'heritage - toString()


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Problème d'heritage - toString()
    Bonjour,

    J'ai créé deux classes Etudiant et Ingenieur. Dans la classe Etudiant j'ai la méthode toString() affiche des infos entre autre la méthode calculMoyenne().

    La classe Ingenieur est une sous-classe d'Etudiant. Je modifie la méthode calculMoyenne() et aussi la méthode toString(). Le toString() d'Ingenieur veut afficher le toString() d'Etudiant puis son calculMoyenne() => cf le code.

    Mon problème : le super.toString() dans toString() d'Engenieur utilise la méthode calculMoyenne() d'Engenieur au lieu d'Etudiant?? Pourquoi?? C'est normal??

    Classe Etudiant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    public class Etudiant {
    	//champs privé
    	private String nom;
    	private int[] notes=new int[3];
    	private int nombreNotes=0;
     
    	public Etudiant(String n){
    		nom=n;
    	}
     
    	public boolean ajouteNote(int n){
    		if(nombreNotes<3){
    			notes[nombreNotes]=n;
    			nombreNotes++;
    			return true;
    		}else{
    			return false;
    		}
    	}
     
    	public float calculMoyenne(){
    		float moyenne=0;
    		if(nombreNotes>0){
    			for(int i=0;i<nombreNotes;i++){
    				moyenne+=notes[i];
    			}
    			moyenne/=nombreNotes;
     
    		}
    		return moyenne;
    	}
     
    	public String toString(){
    		return nom+" ; nombre de notes au qcm: "+nombreNotes+
    			" ; moyenne qcm: "+this.calculMoyenne();
    	}
    }
    Classe Ingenieur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    26
    public class Ingenieur extends Etudiant {
     
    	private int grandOral=0;
    	private int promo;
     
    	public Ingenieur(String n, int p) {
    		super(n);
    		promo=p;
    	}
     
    	public void setGrandOral(int go) {
    		grandOral = go;
    	}
     
    	public float calculMoyenne(){
    		return (super.calculMoyenne())/2;
    	}
     
    	public String toString(){
    		String res=super.toString();
    		res+=" promo "+promo;
    		res+=" ; Grand Oral: "+grandOral;
    		res+=" ; moyenne total: "+this.calculMoyenne();
    		return res;
    	}
    }

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par sheriff64 Voir le message
    Mon problème : le super.toString() dans toString() d'Engenieur utilise la méthode calculMoyenne() d'Engenieur au lieu d'Etudiant?? Pourquoi?? C'est normal??
    Oui c'est normal : il s'agit des règles d'appel d'une méthode virtuelle !
    La méthode a exécuté est établi selon le type réel de l'instance de l'objet lors de l'exécution...

    a++

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Merci, mais comment je fais pour que le super.toString() dans toString() d'Engenieur utilise la méthode calculMoyenne() d'Etudiant?

  4. #4
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Citation Envoyé par sheriff64 Voir le message
    Merci, mais comment je fais pour que le super.toString() dans toString() d'Engenieur utilise la méthode calculMoyenne() d'Etudiant?
    Tu la déclares comme privée ("private").
    En faisant ça, tu perds l'héritage dynamique de "calculMoyenne()". Chaque méthode (Etudiant/Ingénieur) portant ce nom devient indépendante de l'autre.

    Sinon, tout simplement, tu changes le nom d'une de ces méthodes... ça aura également pour effet de les découpler.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'heritage basique
    Par psal78 dans le forum Général Java
    Réponses: 2
    Dernier message: 03/02/2010, 16h00
  2. [JUnit] [Debutant] Problème d'heritage
    Par Arnaoud dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 02/11/2007, 16h20
  3. problème avec heritage en java
    Par yLaplace dans le forum Langage
    Réponses: 16
    Dernier message: 27/03/2007, 13h31
  4. Problème d'heritage dans vecteur
    Par coco-loco dans le forum Langage
    Réponses: 3
    Dernier message: 07/02/2007, 12h28
  5. probléme d'heritage
    Par bonjour69 dans le forum C++
    Réponses: 6
    Dernier message: 24/04/2006, 11h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo