Dans cette feuille d'exercice, nous voyons rapidement l'héritage, la résolution de méthode, les interfaces et les classes abstraites.
Exercice 1 - Méthode equals()
Avec le code de la classe Point (et sa méthode same()), éssayer le code suivant:
Point p1 = new Point(1,1); Point p2 = new Point(1,1); System.out.println(p1.equals(p2));
Qu'affiche ce code? Pourquoi le programme compile? Que changer dans la classe Point pour que ce code affiche ce qu'on attend? Faire cette modification et vérifier que cela fonctionne.
Éssayer ensuite le code suivant:
Object o1 = new Point(1,1); Object o2 = new Point(1,1); System.out.println(o1.equals(o2));
Expliquer le comportement obtenu. Faire les modifications adéquates dans la méthode equals() de la classe Point de sorte qu'elle redéfinisse celle appelée dans l'exemple ci-dessus au lieu de la surcharger.
Comment définir la méthode equals() de la classe ColoredPoint? En particulier, tester et commenter la portion de code suivante:
Point p = new Point(1,1); ColoredPoint cp = new ColoredPoint(1,1,Color.red); System.out.println("p.equals(cp) vaut "+p.equals(cp)); System.out.println("cp.equals(p) vaut "+cp.equals(p));
Exercice 2 - Abstraction, interface et réalisation
On désire maintenant disposer d'un type, représentant des points, sur lequel les méthodes suivantes soient disponibles:
Réaliser le type attendu en utilisant une interface (mot-clé interface), avec deux classes PointImplInt et PointImplFloat réalisant cette interface (mot-clé implements).
Pouvez vous déceler des parties de codes dupliquées, ou tout du moins factorisables, entre ces deux implémentations de l'interface?
Factoriser le maximum de code dans une classe abstraite APoint (mot-clé abstract class), dont deux classes concrètes PointInt et PointFloat hériteront.
Exercice 3 - Interfaces et classes utilitaires
On veut maintenant pouvoir ordonner les points, en comparant leurs abscisses et, en cas d'égalité, leurs ordonnées.
Écrire une méthode sortArray() qui accepte en argument un tableau de points et qui le trie suivant cet ordre. On pourra pour cela créer un comparateur de points implémentant l'ionterface l'interface java.util.Comparator et se servir de méthodes de la classe java.util.Arrays.