Java Language Implémentation d'interfaces dans une classe abstraite


Exemple

Une méthode définie dans une interface est par défaut public abstract . Lorsqu'une abstract class implémente une interface , toutes les méthodes définies dans l' interface ne doivent pas être implémentées par la abstract class . En effet, une class déclarée abstract peut contenir des déclarations de méthode abstraites. Il incombe donc à la première sous-classe concrète d’implémenter toutes abstract méthodes abstract héritées des interfaces et / ou de la abstract class .

public interface NoiseMaker {
    void makeNoise();
}

public abstract class Animal implements NoiseMaker {
    //Does not need to declare or implement makeNoise()
    public abstract void eat();
}

//Because Dog is concrete, it must define both makeNoise() and eat()
public class Dog extends Animal {
    @Override
    public void makeNoise() {
        System.out.println("Borf borf");
    }

    @Override
    public void eat() {
        System.out.println("Dog eats some kibble.");
    }
}

A partir de Java 8 en avant , il est possible pour une interface de déclarer par default les implémentations de méthodes qui signifie que la méthode ne sera pas abstract , donc des sous-classes concrètes ne seront pas contraints de mettre en œuvre la méthode , mais héritera de la default la mise en œuvre , sauf contrordre.