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 :

[Dédutant] Surdéfinition de méthodes


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 306
    Par défaut [Dédutant] Surdéfinition de méthodes
    Bonjour,

    Si j'ai "bien compris" la surdefinition de méthodes est plusieurs méthodes portant le meme nom dans une classe, chaque méthode à un comportement différent et c'est le programme qui choisi celle qui correspond le mieux (J'me trompe ??)......

    Voici le petit script que j'ai codé et qui est cencé choisir entre 2 méthodes addition laquelle correspond le mieux mais cela ne fonctionne pas vraiment...

    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
    public class Calcul {
    	public Calcul(int txt1, int txt2, int txt3)
    	{
    		a = txt1;
    		b = txt2;
    		c = txt3;
    	}
     
    	public void addition(int a, int b)
    	{
    		d = a + b;
    	}
     
    	public void addition(int a, int b, int c)
    	{
    		d = a + b * c;
    	}
     
    	public void afficher()
    	{
    		System.out.println(d);
    	}
     
    	private int a, b, c, d;
    }
     
    class surdef
    {
    	public static void main(String args[])
    	{
    		Calcul g = new Calcul(8,7,4);
    		g.addition();
    		g.afficher();
    	}
     
    }
    Un peu d'aide ne fairait pas d'mal
    Merci d'avance pour vos lumières

  2. #2
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Par défaut
    Tu utilises des arguments et des attributs au même nom, je ne sais plus s'il prends en priorité l'attribut ou l'argument, mais quoiqu'il en soit, tes fonctions ne feront pas ce que tu veux faire.

    Ensuite, tu définis deux fonctions addition : une avec deux arguments, l'autre avec 3 et pourtant tu appelles ta fonction addition().

    T'as essayé de compiler ton code au moins ?

    Et puis pour tout savoir sur la surcharge, tu vas voir le cours fraichement traduit de "penser en java" sur le site

  3. #3
    Membre Expert
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Par défaut
    Sur un sous-forum Débuter tu n'es pas obligé de mettre un tag [Débutant]

    Tu utilises des arguments et des attributs au même nom, je ne sais plus s'il prends en priorité l'attribut ou l'argument, mais quoiqu'il en soit, tes fonctions ne feront pas ce que tu veux faire.
    La règle générale: priorité à l'identificateur de plus faible portée lexicale, donc priorité de l'argument sur l'attribut, pas de problème ici (car d n'est pas un argument), mais ça pourrait être encore plus clair d'écrire this.d := a + b;.

    Il y a plusieurs erreurs de méthode dans ton code:
    1. tes opérations sont davantage des assignations que des additions
    2. tant que tu n'additionnes que des entiers ou des réels, l'opérateur + est déjà surdéfini, tu n'as pas besoin d'une surdéfinition explicite
    3. un appel de méthode obj.méthode(arg¹,...,argⁿ) n'est pas valide si la classe de obj ne possède aucune méthode avec n arguments

  4. #4
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 702
    Par défaut
    Si j'ai "bien compris" la surdefinition de méthodes est plusieurs méthodes portant le meme nom dans une classe, chaque méthode à un comportement différent et c'est le programme qui choisi celle qui correspond le mieux (J'me trompe ??)......
    Tu te trompes! Le JAVA ne va bien évidement pas deviner à ta place ce que tu a l'intention de faire.

    Ce que tu appèles surdéfinition(le nom exact me reviens pas) consiste en effet à définir plusieurs fonctions avec un nom identique mais qui possèdent des paramètre de type ou de nombre différents. La méthode appelée sera celle qui la les paramètre correspondant lors de l'appel.

    Cela signifie que dans ton exemple, on peut aussi bien utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    g.addition(6,100) // d prendra la valeur 106 (100 + 6)
    g.addition(6,3,100) // d prendra la valeur 306 (6 + 3*100)
    mais addition() n'étant pas définie, son comportement ne sera par deviné par JAVA.

  5. #5
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    Cette entrée dans la FAQ devrait t'éclairer un peu plus :
    C'est quoi la surcharge (ou encore overload)des méthodes ?

    en ce qui concerne ta description de la "surdéfinition" ... en fait le comportement que tu décris c'est plutôt quand tu redéfinis une méthode dans une classe fille et qu'à l'exécution, la "bonne" méthode est exécutée.

    Mini exemple :
    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
     
    class A {
         void affiche() { System.out.println("Je suis un A");}
    }
     
    class B extends A {
         // ici la signature est la même mais le code est différent
         void affiche() { System.out.println("Je suis un B");}
    }
     
    class Test {
         public static void main(String[] args){
                A unA = new A();
                B unB = new B();
                A unFilsDeA = new B();
     
     
                // là à l'exécution, la bonne méthode sera exécutée ...
                unA.affiche();
                unB.affiche();
                unFilsDeA.affiche();
         }
    }
     
    // output :
    //Je suis un A
    //Je suis un B
    //Je suis un B


    Sinon pour ton exemple, n'as tu pas une belle erreur de compilation ?

    Tu appelles la méthode addition() mais elle n'existe pas dans ta classe Calcul ...


    [EDIT] ha ok, le temps de taper et je suis déjà doublement grillé

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 306
    Par défaut
    Merci à tous pour votre aide

    Citation Envoyé par Uther Voir le message
    Tu te trompes! Le JAVA ne va bien évidement pas deviner à ta place ce que tu a l'intention de faire.

    Ce que tu appèles surdéfinition(le nom exact me reviens pas) consiste en effet à définir plusieurs fonctions avec un nom identique mais qui possèdent des paramètre de type ou de nombre différents. La méthode appelée sera celle qui la les paramètre correspondant lors de l'appel.
    C'est effectivement ce que j'ai compris, JAVA n'est pas devin... Merci ^^


    Citation Envoyé par in Voir le message
    Sinon pour ton exemple, n'as tu pas une belle erreur de compilation ?

    Tu appelles la méthode addition() mais elle n'existe pas dans ta classe Calcul ...
    Si, j'ai bien une erreur de compilation, cela dit si je fais cela mon script ne fonctionne pas mieux, la aussi erreur de compilation....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Calcul g = new Calcul(8,7,4);
    		g.addition(8,7,4);
    		g.afficher();

    Merci pour vos aides, conseils et liens

Discussions similaires

  1. héritage multipes, surdéfinitions des méthodes
    Par kimjoa dans le forum Langage
    Réponses: 8
    Dernier message: 09/01/2010, 18h46
  2. [JavaScript] [SRC] héritage javascript, et surdéfinition des méthodes
    Par kimjoa dans le forum Contribuez
    Réponses: 5
    Dernier message: 16/02/2009, 14h26
  3. Problème surdéfinition d'une méthode.
    Par slopez dans le forum BOUML
    Réponses: 4
    Dernier message: 23/12/2008, 22h14
  4. Probleme d'impression avec la méthode TForm->Print()
    Par Kid Icarus dans le forum C++Builder
    Réponses: 13
    Dernier message: 31/07/2002, 14h26
  5. Cryptage en C selon la méthode de césat
    Par shenron dans le forum C
    Réponses: 2
    Dernier message: 31/05/2002, 08h22

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