Polymorphisme : Interface & Héritage (source : livre de Horstmann)
Exercice 4.1
La méthode de tri compare un objet avec un autre en appelant la méthode compareTo(). Durant
la phase de compilation, le type des objets à comparer (o1,o2) n’est pas connu, et il n'est donc
pas possible de déterminer quelle méthode compareTo () doit être appelée (o1.comapreTo(o2)).
Donc, cette décision est généralement reportée à la phase d’exécution. Durant l’exécution, c’est
le principe du « polymorphisme » qui permet au système d'exécution (généralement la
machine virtuelle Java) de trouver et d'utiliser la méthode compareTo () correspondant à la
classe (type) de l'objet utilisé dans la comparaison.
Exercice 4.2
Dans l'appel o.f (), supposons que la variable o est déclarée comme étant de type X. Dans ce cas,
l'objet référencé par o doit être une instance de la classe X ou une de ses sous-classes. Le
compilateur peut déterminer la méthode exacte à appeler pour f () dans les cas suivants:
1. La classe X est déclarée « final » ; dans ce cas, elle n'a pas et n’aura jamais de sous-
classes.
2. Méthode f () est déclarée « final » ; dans ce cas elle ne peut pas être redéfinie dans les
sous-classes de X ; chaque objet (de type X ou les sous-types de X) appelant la méthode
f() va exécuter f() déclarée dans la classe X.
3. Méthode f () est déclarée comme étant statique. La méthode ne peut pas être appelée
sur un objet de X ; elle sera appelée seulement sur la classe X : X.f(). Donc, il n’y a
aucune ambigüité quant à la méthode à appeler.
Exercice 4.5
import java.util.*;
import java.math.*;
public class Ex4_5
{
public static void main(String[] args)
{
ArrayList values = new ArrayList();
values.add(new BigDecimal("1230990480229874019780"));
values.add(new BigDecimal("1230990480129874019780"));
values.add(new BigDecimal("1230990480129874039780"));
System.out.println(minimum(values));
}