Java redéfinition d'une méthode
Résolu
overcode
Messages postés
119
Date d'inscription
Statut
Membre
Dernière intervention
-
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++ ...)
A voir également:
- Java redéfinition d'une méthode
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
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
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 ?
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
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 :
Cordialement,
@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 :)
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 :)