// 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));
    }
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: