Programmation Java/Classes abstraites

Un livre de Wikilivres.
  • Une classe abstraite se trouve à mi-chemin entre les interfaces et les classes.
  • Les classes abstraites, comme les interfaces, ne sont pas instanciables.
  • Les classes abstraites sont déclarées par le modificateur abstract.
  • Il y a plusieurs intérêts à définir des classes abstraites :
    • pour interdire l'instanciation d'une classe ;
    • pour faire de la factorisation de code en ne donnant qu'une implémentation partielle.

Exemple[modifier | modifier le wikicode]

public interface Chien
{
    public void vieillir();
    public void aboyer();
}

On sait que la méthode vieillir sera implémentée de la même manière quelle que soit l'implémentation de Chien. Plutôt que d'implémenter cette interface à chaque fois, on va factoriser le code dans une classe abstraite et étendre cette classe quand le besoin s'en fait sentir. On crée donc une classe AbstractChien qui n'implémente que la méthode vieillir de notre interface, les autres étant laissées abstract.

package org.wikibooks.fr;

public abstract class AbstractChien implements Chien
{
    // Champs
    // On met les champs en protected pour que les classes filles
    // puissent les manipuler directement.
    protected int age;
    protected String couleur;

    //Constructeur
    //Pourra être utilisé par les classes filles pour initialiser les champs.
    public AbstractChien(int age, String couleur)
    {
        this.age = age;
        this.couleur = couleur;
    }
    
    // Méthode

    //On donne l'implémentation qui est commune à tous les chiens
    public void vieillir()
    {
        age ++;
    }

    //Cette méthode n'est définie que par les classes filles
    //Elle est donc laissée abstract.
    public abstract void aboyer(); 
}