Claro, voy a poner un ejemplo en codigo.
// Figura.java
interface DatosFigura {
double area();
}
// Cuadrado.java
class Cuadrado implements Figura {
private double base;
private double altura;
// el constructor recibe los datos de la instancia de un cuadrado
public Cuadrado(...) { ... }
@Override
public double area() {
return this.base * this.altura;
}
}
// Circulo.java
class Circulo implements Figura {
private double radio;
// el constructor recibe los datos de la instancia de un Circulo
public Circulo(...) { ... }
@Override
public double area() {
return Math.PI * Math.pow(this.radio, 2);
}
}
La interfaz Figura define un metodo que calcula el area de una figura, pero cada tipo de figura tiene una forma diferente de calcularse, por eso defini dos clases, Cuadrado y Circulo cada clase implementa la interfaz, como la implementan entonces sobreescriben el metodo area(), y cada uno lo implementa de acuerdo a que tipo de figura es, cada implementacion es independiente y puede ser como se necesite, si es un cubo sera diferente o si es una piramide o un triangulo, cada implementacion es unica. Lo unico que tiene que cumplir es con la firma del metodo de la interfaz, eso quiere decir en este caso que debe llamarse area y debe retornar un valor tipo double.