On peut effectivement remplacer l'utilisation de l'interface Mesurable par l'utilisation de l'héritage de la classe abstraite AbstractMesurabl suivante:
public abstract class AbstractMesurable { /** * Permet de connaitre la surface de cette instance. */ public abstract double surface(); /** * Retourne l'instance de surface minimale. */ public AbstractMesurable min(AbstractMesurable am) { return (surface() < am.surface()) ? this : am; } public static void main(String[] args) { Point p = new Point(); Disque d = new Disque(p,1); Anneau a = new Anneau(p,1,0.5); Carre c = new Carre(p,1); System.out.println(d.min(a)); System.out.println(a.min(c)); System.out.println(d.min(c)); } }
Les autres classes deviennent alors:
public class Carre extends AbstractMesurable { ... } public class Disque extends AbstractMesurable { ... } public class Anneau extends Disque { ... }
On peut également implémenter l'interface Mesurable existante pour définir la classe abstraite AbstractMesurable. Comme elle hérite d'une méthode abstraite sans la définir, elle doit également être abstraite.
public abstract class AbstractMesurable implements Mesurable { /** * Retourne l'instance de surface minimale. */ public AbstractMesurable min(AbstractMesurable am) { return (surface() < am.surface()) ? this : am; } }
Corrigés des exercices suivants