Java redéfinition d'une méthode

Résolu
overcode Messages postés 128 Statut Membre -  
 angélina -
Salut,

Ayant le code suivant :

class A
{
public void f()
{
...
}
}

class B extends A
{
public void f()
{
...
}
}

Comment je pourrai appeler f de A à partir d'un objet de type B ?
B b = new B() ;
// Comment appeler f qui est dans A ?

Merci de répondre à cette question qui me torture (je viens du monde C++ ...)
Configuration: Firefox 3.0.3

5 réponses

  1. artragis Messages postés 510 Statut Membre 146
     
    hé bien java est un langage objet, une fois que tu as dit que b héritait de a he ben, b aura une methode f() avec les mêmes arguments.
    enfin, logiquement, après moi c'est ce que j'ai compris dans les tutoriels que je lis
    0
  2. overcode Messages postés 128 Statut Membre 27
     
    Tu peux appeler f de B comme ceci :
    B b = new B() ;
    b.f() ;

    Mais comment retrouver f de A ? En C++ c'est possible mais en Java ?
    0
    1. Marco la baraque Messages postés 1030 Statut Contributeur 329
       
      Bonsoir,
      Ce n'est pas possible en java. En principe tu ne devrais jamais avoir à faire ça.
      B est une spécialisation de A. Si tu as besoin d'appeler la méthode f de B, tu instancies B. Si tu as besoin d'appeler la méthode f de a, pourquoi utilises-tu une instance de B et non pas de A ?

      Dans quel cas concret as-tu ce problème stp ?

      Cordialement,

      Edit : j'aimerais bien savoir comment tu fais ça en C++ aussi
      0
  3. simowarez
     
    tu peut l'appeler simplement par super
    super.f()
    et le tour est joué
    0
    1. angélina
       
      super te permet d'appeler f de la superclasse A a partir de b
      0
  4. Marco la baraque Messages postés 1030 Statut Contributeur 329
     
    Bonsoir,
    @simowarez : mais non, la question n'est pas là. Overcode a surchargé sa méthode f pour en modifier le comportement. Ici la question est : j'ai une instance b de B (qui étend A). Comment puis-je faire pour appeler la méthode f de A depuis cette instance b.
    Ce n'est pas possible de faire b.super.f() par exemple.

    @overcode : j'ai trouvé une méthode utilisant l'introspection pour créer une nouvelle instance de a juste en connaissant b, par introspection. Je ne sais pas si ça répond à tes besoins ou non :
                    B b = new B();
    		Class aClass = b.getClass().getSuperclass();
    		Method m;
    		try {
    			m = b.getClass().getSuperclass().getDeclaredMethod("f");
    			m.invoke(aClass.newInstance(), new Object[0]);
    		} catch (SecurityException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (NoSuchMethodException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IllegalArgumentException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IllegalAccessException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (InvocationTargetException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (InstantiationException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    


    Cordialement,
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. overcode Messages postés 128 Statut Membre 27
     
    Merci Marco,

    En C++, ça se passe comme ça :

    class A
    {
    ...

    public :
    void f(void) ;

    ...
    } ;

    class B : public A
    {
    ...
    public :
    void f(void) ;

    ...
    } ;

    et maintenant à n'importe quel point du programme :

    B b ; // en supposant un constructeur void
    b.f() ; // appel de f de B
    b.A::f() ; // appel de f de A

    Désolé pour le retard :)
    0
    1. Marco la baraque Messages postés 1030 Statut Contributeur 329
       
      Merci beaucoup Overcode,
      Je ne savais pas qu'on pouvait faire ça en C++, c'est intéressant.

      Bien cordialement,
      0