Java Language Implémentation de plusieurs interfaces


Exemple

Une classe Java peut implémenter plusieurs interfaces.

public interface NoiseMaker {
    String noise = "Making Noise"; // interface variables are public static final by default

    String makeNoise(); //interface methods are public abstract by default
}

public interface FoodEater {
    void eat(Food food);
}

public class Cat implements NoiseMaker, FoodEater { 
    @Override
    public String makeNoise() {
        return "meow";
    }

    @Override
    public void eat(Food food) {
        System.out.println("meows appreciatively");
    }
}

Notez que la classe Cat doit implémenter les méthodes abstract héritées dans les deux interfaces. En outre, notez qu'une classe peut pratiquement implémenter autant d'interfaces que nécessaire (la limite de la JVM est limitée à 65 535 ).

NoiseMaker noiseMaker = new Cat(); // Valid
FoodEater foodEater = new Cat(); // Valid
Cat cat = new Cat(); // valid

Cat invalid1 = new NoiseMaker(); // Invalid
Cat invalid2 = new FoodEater(); // Invalid

Remarque:

  1. Toutes les variables déclarées dans une interface sont public static final
  2. Toutes les méthodes déclarées dans une interface sont public abstract (cette instruction est valide uniquement via Java 7. A partir de Java 8, vous êtes autorisé à avoir des méthodes dans une interface, qui ne doivent pas nécessairement être abstraites; ces méthodes sont appelées méthodes par défaut )
  3. Les interfaces ne peuvent être déclarées comme final
  4. Si plusieurs interfaces déclarent une méthode ayant une signature identique, elle est effectivement traitée comme une seule méthode et vous ne pouvez pas distinguer la méthode d'interface implémentée
  5. Un fichier InterfaceName.class correspondant serait généré pour chaque interface, lors de la compilation.