Cuando una clase implementa una interfaz en Java, debe proporcionar implementaciones para todos los métodos que están definidos en esa interfaz. Esto asegura que la clase cumpla con el contrato establecido por la interfaz.
Por ejemplo, si tienes una interfaz llamada "Tributable" que define un método como getValorImpuesto(), cualquier clase que implemente esta interfaz debe proporcionar su propia versión de este método. Si no lo hace, la clase no podrá compilarse.
public interface Tributable {
double getValorImpuesto();
}
public class Producto implements Tributable{
private String nombre;
private double valor;
@Override
public double getValorImpuesto() {
return this.valor * 0.1;
}
//getters y setters
}
public class Servicio implements Tributable{
private String descripcion;
private double valor;
private double cuotaJubilacion;
@Override
public double getValorImpuesto() {
return this.valor * this.cuotaJubilacion / 100;
}
//getters y setters
}
Y de ser el caso se pueden asignar como atributos de un método, como se muestra en el siguiente código. Podemos asignarle cualquier objeto que implemente esa interfaz, ya sea un objeto de tipo "Servicio" o "Producto". En ambos casos, la "CalculadoraImpuesto" llamará al método implementado en la clase específica.
public class CalculadoraImpuestos {
private double totalImpuesto = 0;
public void calcularImpuesto(Tributable item) {
this.totalImpuesto += item.getValorImpuesto();
}
public double getTotalImpuesto() {
return this.totalImpuesto;
}
}