// Contrato: toda modalidad debe saber calcular su costo
interface Servicio {
double calcularCosto();
}
// Urbano: tarifa base + kilómetros recorridos
class ViajeUrbano implements Servicio {
private double tarifaBase;
private double kilometros;
private double valorKm;
public ViajeUrbano(double tarifaBase, double kilometros, double valorKm) {
this.tarifaBase = tarifaBase;
this.kilometros = kilometros;
this.valorKm = valorKm;
}
public double calcularCosto() {
return tarifaBase + kilometros * valorKm;
}
}
// Intermunicipal: tarifa base + kilómetros recorridos + peaje
class ViajeIntermunicipal implements Servicio {
private double tarifaBase;
private double kilometros;
private double valorKm;
private double peaje;
public ViajeIntermunicipal(double tarifaBase, double kilometros, double valorKm, double peaje) {
this.tarifaBase = tarifaBase;
this.kilometros = kilometros;
this.valorKm = valorKm;
this.peaje = peaje;
}
public double calcularCosto() {
return tarifaBase + kilometros * valorKm + peaje;
}
}
// Especial: tarifa base + horas contratadas
class TransporteEspecial implements Servicio {
private double tarifaBase;
private double horas;
private double valorHora;
public TransporteEspecial(double tarifaBase, double horas, double valorHora) {
this.tarifaBase = tarifaBase;
this.horas = horas;
this.valorHora = valorHora;
}
public double calcularCosto() {
return tarifaBase + horas * valorHora;
}
}
// Procesa cualquier servicio sin usar condicionales (polimorfismo)
class Calculadora {
public void procesar(Servicio servicio) {
System.out.println("Costo del servicio: " + servicio.calcularCosto());
}
}
// Clase principal: crea los objetos y ejecuta el programa
public class Main {
public static void main(String[] args) {
Calculadora calc = new Calculadora();
calc.procesar(new ViajeUrbano(3000, 10, 1200));
calc.procesar(new ViajeIntermunicipal(5000, 80, 900, 12000));
calc.procesar(new TransporteEspecial(20000, 3, 15000));
}
}
To embed this project on your website, copy the following code and paste it into your website's HTML: