l'appelle d'une méthode add(..)

l'appelle d'une méthode add(..) - Java - Programmation

Marsh Posté le 07-01-2014 à 09:37:56    

Bonjour ;  
j'ai besoin de l'aide ! je n'arrive pas à comprendre pourquoi la methode add de la classe computer qui sera appeler lors de m.add(9,5) et non pas de SuperComputer ???  et merci d'avance
 
 
public class Computer
{
    public static int add (int a, int b)
    {
        return a + b;
    }
}
public class SuperComputer extends Computer
{
    public static int add (int a, int b)
    {
        return 0;
    }
}
public class Test
{
    public static void main (String[] args)
    {
        Computer pc = new SuperComputer();
        int sum = pc.add (9, 5);
        System.out.println (sum);
    }
}


Message édité par aminaxs le 07-01-2014 à 09:46:23
Reply

Marsh Posté le 07-01-2014 à 09:37:56   

Reply

Marsh Posté le 07-01-2014 à 09:54:19    

Tes méthodes "add" sont déclarées "static", elle sont donc définies au niveau de la classe, pas de l'instance.  
 
Il n'y a pas besoin du "new SuperComputer()", et les appels devraient se faire via "Computer.add(...)" ou "SuperComputer.add(...)".  
 
Même si Java accepte les appels via une instance comme tu le fais, c'est fortement déconseillé. C'est en fait le compilateur qui va transformer l'appel à la méthode en un appel statique, en regardant uniquement le type de la variable (et pas le type réel de l'objet, qui n'est pas forcément connu à la compilation). Donc dans ton cas, le compilateur va transformer "pc.add(9, 5)" en "Computer.add(9, 5)", ce qui explique le résultat que tu obtiens.
 
Pour obtenir ce que tu veux, tu peux simplement enlever le mot clé "static" sur tes méthodes "add".


---------------
Are you two fucking? Are you serious? Right in front of my salad?!
Reply

Marsh Posté le 07-01-2014 à 10:01:24    

ahh je vois mercii beaucoup riokmij :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed