Java Language Implementazione di più interfacce


Esempio

Una classe Java può implementare più interfacce.

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");
    }
}

Si noti come la classe Cat deve implementare i metodi abstract ereditati in entrambe le interfacce. Inoltre, nota come una classe può praticamente implementare tutte le interfacce necessarie (c'è un limite di 65.535 a causa della Limitazione JVM ).

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

Nota:

  1. Tutte le variabili dichiarate in un'interfaccia sono public static final
  2. Tutti i metodi dichiarati in un'interfaccia metodi sono public abstract (Questa dichiarazione è valida solo tramite Java 7. Da Java 8, è possibile avere metodi in un'interfaccia, che non devono essere astratti, tali metodi sono noti come metodi predefiniti )
  3. Le interfacce non possono essere dichiarate final
  4. Se più di una interfaccia dichiara un metodo che ha la stessa firma, allora efficacemente viene trattato come un solo metodo e non è possibile distinguere da quale metodo di interfaccia è implementato
  5. Un file InterfaceName.class corrispondente verrà generato per ogni interfaccia, dopo la compilazione