> For the complete documentation index, see [llms.txt](https://educacion.gitbook.io/programacion/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://educacion.gitbook.io/programacion/exercicios-java/ud4-solucions/polimorfismo-sobrecarga.md).

# Polimorfismo - Sobrecarga

1. Impresora

```java
public class Impresora {

    private String modelo;
    private int contadorPaginas;

    // Constructor
    public Impresora(String modelo) {
        this.modelo = modelo;
        this.contadorPaginas = 0;
    }

    // Getter
    public String getModelo() {
        return modelo;
    }

    public int getContadorPaginas() {
        return contadorPaginas;
    }

    // imprimir(): imprime unha páxina de proba
    public void imprimir() {
        contadorPaginas++;
        System.out.println("[" + modelo + "] Imprimindo páxina de proba.");
    }

    // imprimir(int copias): imprime o número de páxinas indicado
    public void imprimir(int copias) {
        contadorPaginas += copias;
        System.out.println("[" + modelo + "] Imprimindo " + copias + " páxinas.");
    }

    // imprimir(String documento): imprime un documento polo seu nome (1 páxina)
    public void imprimir(String documento) {
        contadorPaginas++;
        System.out.println("[" + modelo + "] Imprimindo documento: " + documento);
    }

    // imprimir(String documento, int copias): imprime documento con número de copias
    public void imprimir(String documento, int copias) {
        contadorPaginas += copias;
        System.out.println("[" + modelo + "] Imprimindo documento: " 
                           + documento + " (" + copias + " copias).");
    }
}

```

```java
public class App {

    public static void main(String[] args) {

        // Instanciación de dúas impresoras
        Impresora impresora1 = new Impresora("HP LaserJet");
        Impresora impresora2 = new Impresora("Epson EcoTank");

        // Probas coa primeira impresora
        impresora1.imprimir();
        impresora1.imprimir(5);
        impresora1.imprimir("Informe.pdf");
        impresora1.imprimir("Contrato.docx", 3);

        System.out.println("Total páxinas impresas por " 
                           + impresora1.getModelo() + ": " 
                           + impresora1.getContadorPaginas());

        System.out.println("----------------------------");

        // Probas coa segunda impresora
        impresora2.imprimir();
        impresora2.imprimir(2);
        impresora2.imprimir("Factura.pdf");
        impresora2.imprimir("MemoriaAnual.pdf", 10);

        System.out.println("Total páxinas impresas por " 
                           + impresora2.getModelo() + ": " 
                           + impresora2.getContadorPaginas());
    }
}

```

2. Calculadora de Tarifas

```java
public class CalculadoraTarifas {

    // Características estáticas
    public static double tarifaPorHora = 2.0;
    public static double descontoAbonado = 0.20; // 20 %
    public static double descontoFinSemana = 0.10; // 10 %

    // a) calcularTarifa(int horas)
    public static double calcularTarifa(int horas) {
        double total = horas * tarifaPorHora;
        System.out.println("Método calcularTarifa(int horas) chamado");
        return total;
    }

    // b) calcularTarifa(int horas, boolean finDeSemana)
    public static double calcularTarifa(int horas, boolean finDeSemana) {
        double total = horas * tarifaPorHora;

        if (finDeSemana) {
            total -= total * descontoFinSemana;
        }

        System.out.println("Método calcularTarifa(int horas, boolean finDeSemana) chamado");
        return total;
    }

    // c) calcularTarifa(int horas, boolean finDeSemana, boolean abonado)
    public static double calcularTarifa(int horas, boolean finDeSemana, boolean abonado) {
        double total = horas * tarifaPorHora;

        if (finDeSemana) {
            total -= total * descontoFinSemana;
        }

        if (abonado) {
            total -= total * descontoAbonado;
        }

        System.out.println(
            "Método calcularTarifa(int horas, boolean finDeSemana, boolean abonado) chamado"
        );
        return total;
    }

    /*
     * d) calcularTarifa(int horas): float
     * ESTE MÉTODO NON É VÁLIDO EN JAVA
     *
     * public static float calcularTarifa(int horas) {
     *     return (float) (horas * tarifaPorHora);
     * }
     */
}

```

```java
public class App {

    public static void main(String[] args) {

        double t1 = CalculadoraTarifas.calcularTarifa(3);
        System.out.println("Total: " + t1 + " €\n");

        double t2 = CalculadoraTarifas.calcularTarifa(3, true);
        System.out.println("Total: " + t2 + " €\n");

        double t3 = CalculadoraTarifas.calcularTarifa(3, true, true);
        System.out.println("Total: " + t3 + " €");
    }
}

```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://educacion.gitbook.io/programacion/exercicios-java/ud4-solucions/polimorfismo-sobrecarga.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
