Bonjour,

Tout d'abord, désolé pour le titre confus, je ne sais trop comment intituler correctement ce soucis...
Prenons l'exemple suivant :
Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
package test;
 
public class ExtendsStaticTest
{
 
    /**
     * @param args
     */
    public static void main(String[] args)
    {
        B.foo();
        A.getB().foo();
    }
}

Code Java : 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
 
package test;
 
public class A
{
 
    protected static void foo()
    {
        System.out.println("bar");
    }
 
    public static A getB()
    {
        return new B();
    }
}

Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
package test;
 
public class B
    extends A
{
    protected static void foo()
    {
        System.out.println("barB");
    }
}

Selon moi, l'appel à A.getB() me retourne une instance de B, instance dont la classe hérite de A.
A.getB().foo() fait cependant appel à la méthode de la classe A...

Pourquoi et comment faire pour que ce soit la méthode B.foo() qui soit appelée ?


Le soucis réel caché derrière cet ECM est qu'au lieu d'avoir A.getB(), j'ai A.getUneClasse() dont le retour peut être soit une instance de A, soit une instance de B; où B s'agirait d'une classe surchargée par un utilisateur.


Avez vous des explications à me fournir sur ce comportement que je ne comprends pas ?

Merci