Je ne suis pas en mesure de trouver un bon résumé pour décrire mon problème (suggestions bienvenues)Appel de la méthode superclasse dans superclasse
Je suit deux classes:
Test1
import java.lang.reflect.Method;
abstract class Test1 {
boolean condition = true;
public void f() {
System.out.println("Test1 : f");
}
public void g() {
System.out.println("Test1 : g");
f();
if (condition) {
f(); // call Test1.f() here. HOW?
// Following didn't work
try {
Method m = Test1.class.getDeclaredMethod("f");
m.invoke(this);
} catch (Exception e) {
System.err.println(e);
}
}
}
}
Test2
class Test2 extends Test1 {
public void f() {
System.out.println("Test2 : f ");
}
public static void main(String[] args) {
Test2 t2 = new Test2();
t2.g();
}
}
La sortie est:
Test1 : g
Test2 : f
Test2 : f
Test2 : f
Le problème est que, en raison d'une condition spéciale donnée par le champ condition
dans Test1
Je veux appeler Test1
« s f()
dans g()
même si je fais appel à l'aide d'un objet de Test2
.
J'ai essayé la réflexion mais cela ne fonctionne pas non plus. Aucune suggestion? Je n'ai pas mentionné spécifiquement, mais si vous voyez attentivement Test1 est abstrait. Donc je ne peux pas créer son objet.
La logique est complexe, c'est vrai. Mais je ne vois pas votre point, 'super.f()' renvoie 'void', ce n'est pas assignable à booléen. – gaborsch
Je recommandais de changer void en booléen. Cela aidera à prendre la décision sur l'exécution de la logique de la méthode enfant. – CuriousMind
La logique, que ce soit pour appeler le parent ou non, vient de la logique interne de 'g()'. Il ne peut pas être implémenté pour tous les appels à 'f()' (par exemple à partir d'un appel de 'h()'). – gaborsch