9. Interfacce

In Java una classe può estendere solo una classe, non più di una.

Per questo sono state create le interfacce, che possono implementare più interfacce contemporaneamente.

Definizione

Un’interfaccia è come una classe, ma al suo interno gli unici attributi presenti possono essere costanti e tutti i metodi sono public e abstract.

Gli attributi dichiarati in un’interfaccia sono visibili in tutte le classi che la implementano e sono immutabili (static final).

public interface Scalable{
	int SMALL = 0, MEDIUM = 1, BIG = 2; // Costanti static e final
	void setScale(int size);
}

Ereditarietà delle interfacce

Un’interfaccia può essere erede di una o più interfacce contemporaneamente: la sintassi è la seguente.

interface <name> extends <name1>, <name2>, ... {}

Gerarchia di ereditarietà

Una classe può implementare quante interfacce vuole, ma può estendere al massimo una sola classe.

Se la classe non è astratta, allora essa deve fornire un’implementazione a TUTTI i metodi che implementa dall’interfaccia, sennò la classe deve essere astratta.

Ex.

public interface Shape{
	public void draw();
}

public class Circle implements Shape{
	public void draw(){
		System.out.println("Sto disegnando un cerchio");
	}
}


public class Main{
	public static void main(String args[]) {
		Shape circleshape = new Circle();
		circleshape.draw();
	}
}

Metodi statici di un’interfaccia

A partire da Java 8, è possibile definire ed implementare in un’interfaccia metodi static.