Java redéfinition d'une méthode
Résolu/Fermé
overcode
Messages postés
119
Date d'inscription
jeudi 6 décembre 2007
Statut
Membre
Dernière intervention
21 octobre 2011
-
28 oct. 2008 à 20:34
angélina - 12 déc. 2010 à 18:19
angélina - 12 déc. 2010 à 18:19
A voir également:
- Java redéfinition d'une méthode
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
- Java décompiler - Télécharger - Langages
5 réponses
artragis
Messages postés
481
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
6 avril 2010
146
28 oct. 2008 à 21:05
28 oct. 2008 à 21:05
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
overcode
Messages postés
119
Date d'inscription
jeudi 6 décembre 2007
Statut
Membre
Dernière intervention
21 octobre 2011
27
28 oct. 2008 à 21:08
28 oct. 2008 à 21:08
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 ?
Marco la baraque
Messages postés
996
Date d'inscription
vendredi 9 mai 2008
Statut
Contributeur
Dernière intervention
5 novembre 2009
329
28 oct. 2008 à 21:27
28 oct. 2008 à 21:27
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
Marco la baraque
Messages postés
996
Date d'inscription
vendredi 9 mai 2008
Statut
Contributeur
Dernière intervention
5 novembre 2009
329
29 oct. 2008 à 20:41
29 oct. 2008 à 20:41
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
overcode
Messages postés
119
Date d'inscription
jeudi 6 décembre 2007
Statut
Membre
Dernière intervention
21 octobre 2011
27
13 nov. 2008 à 19:26
13 nov. 2008 à 19:26
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 :)
Marco la baraque
Messages postés
996
Date d'inscription
vendredi 9 mai 2008
Statut
Contributeur
Dernière intervention
5 novembre 2009
329
13 nov. 2008 à 20:51
13 nov. 2008 à 20:51
Merci beaucoup Overcode,
Je ne savais pas qu'on pouvait faire ça en C++, c'est intéressant.
Bien cordialement,
Je ne savais pas qu'on pouvait faire ça en C++, c'est intéressant.
Bien cordialement,