J'ai défini deux classes ci-dessous:comment appeler la méthode sans connaître le nom de la classe?
public class junk {
private BigInteger a = BigIngeger.valueOf(1), b=BigInteger.valueOf(2), c;
public void DoSomething() {
c = a.add(b);
}
// ... other stuff here
}
public class junkChild extends junk {
private BigDecimal a = BigDecimal.valueOf(1), b=BigDecimal.valueOf(2), c;
// I want a, b, c to override the original BigInteger a,b,c
// ... other stuff here
}
public class myClass {
public static void main(String args[]) {
junk a1 = new junkChild();
a1.DoSomething();
}
}
Malheureusement ne fonctionne pas au-dessus.
Ce que je veux faire est de changer simplement a
, b
, c
-BigDecimal
en junkChild
sans réécrire DoSomething()
à nouveau. Même si je dois l'écrire à nouveau, le code sera exactement le même, donc il devrait y avoir un moyen de faire ce travail sans avoir à l'écrire. La fonction DoSomething
doit vérifier que le type a1
a une méthode add
du type d'entrée et de retour correct, et si c'est le cas, l'invoquer sans se soucier du type a
, b
, c
.
Est-ce que cela peut être fait?
Vous devriez lire à la réflexion. Cela répondra à la deuxième partie de votre question. Comme pour la première partie, n'utilisez pas directement les champs 'a',' b' et 'c', mais utilisez plutôt les méthodes' getA', 'getB', et' getC' que vous substituez dans les sous-classes. –
On dirait que ce que vous voulez vraiment, ce sont des modèles de type C++. –
On dirait qu'il veut vraiment "taper du canard". – Asaph