Le interfacce in java
Cos'è un'interfaccia in Java
Un'interfaccia è un insieme di nomi di metodi astratti che possono essere implementati su più classi.
Ogni classe che implementa l'interfaccia definisce i metodi in modo diverso dalle altre classi che implementano la stessa interfaccia.
Nota. Le interfacce non posso usarle per creare oggetti. Sono classi astratte con metodi senza corpo. Inoltre non possono contenere costruttori.
A cosa servono le interfacce?
Il linguaggio Java usa l'ereditarietà singola.
Questo vuol dire che una classe ha sempre una sola superclasse da cui eredita variabili, proprietà e metodi.
Nota. In altri linguaggi OOP (orientati agli oggetti) a ereditarietà multipla, invece, una classe può avere più superclassi.
L'ereditarietà singola è più semplice da gestire ma comporta dei limiti.
Per superare questi limiti, in Java sono state introdotte le interfacce.
Come creare un interfaccia
Per definire un'interfaccia
public interface nomeinterfaccia {
}
Un'interfaccia può eventualmente ereditare i metodi da un'altra interfaccia tramite la parola chiave extends.
public interface nomeinterfaccia extends interfacciamadre {
}
Come implementare un'interfaccia in una classe
Quando creo la classe aggiungo la clausola implements seguita dal nome dell'interfaccia
public class nome implements interfaccia {
}
Se le interfacce da implementare nella classe sono due o più sono dette interfacce multiple.
Devo elencarle una dopo l'altra separandole tra loro con una virgola
public class nome implements interfaccia1, interfaccia2 {
}
Un esempio pratico
Creo un'interfaccia (Animale) con un metodo (verso).
interface Animale {
public void verso();
}
Poi implemento l'interfaccia in una classe (Gatto) e definisco il metodo verso.
class Gatto implements Animale {
public void verso() {
System.out.println("miao");
}
}
Infine nella classe principale creo un oggetto (myCat) con la classe Gatto
class MyMainClass {
public static void main(String[] args) {
Gatto myCat = new Gatto();
myCat.verso();
}
}
Il metodo myCat.verso() restituisce la stringa "miao".
Esempio 2
Allo stesso modo posso implementare l'interfaccia Animale nella classe Cane.
class Cane implements Animale {
public void verso() {
System.out.println("bau");
}
}
Poi creo un oggetto myDog usando la classe Cane.
class MyMainClass {
public static void main(String[] args) {
Gatto myCat = new Gatto();
myCat.verso();
Cane myDog = new Cane();
myDog.verso();
}
}
Il metodo myDog.verso restituisce "bau".
E così via.