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
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++ ...)
A voir également:

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
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
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
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
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
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
0
tu peut l'appeler simplement par super
super.f()
et le tour est joué
0
super te permet d'appeler f de la superclasse A a partir de b
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
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 :
                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

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
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
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
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,
0