Java redéfinition d'une méthode
Résolu
overcode
Messages postés
128
Statut
Membre
-
angélina -
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++ ...)
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
-
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 -
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 ?-
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
-
-
-
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, -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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 :)