Implementando Interfaces

Alguém poderia me explicar exatamente o que se refere quando eu crio um objeto na memória, porém associo ele a varável a1 do tipo interface (AreaCalculavel)? Estou um pouco confuso, veja abaixo o exemplo.

package exercicio0101;

public class Aplicacao {

public static void main(String[] args) {      double area;      AreaCalculavel a1 = new Quadrado(10);     area = a1.calculaArea();     System.out.println("Area do Quadrado: " + area);      AreaCalculavel a2 = new Circunferencia(5);     area = a2.calculaArea();     System.out.println("Area da Circunferencia: " + area);      AreaCalculavel a3 = new Retangulo(10, 2.5);     area = a3.calculaArea();     System.out.println("Area do Retangulo: " + area);   } 

}