miércoles, 25 de septiembre de 2024

■ Java ► Polimorfirmo por parámetros

En el ejemplo de las clases Persona, Empleado y Cliente se mostró cómo funciona el polimorfismo por sobreescritura de métodos cuando hay herencia (ver aquí), en este ejemplo, que ya no toma como base el anterior, se mostrará el polimorfismo por parámetros.


■ Polimorfismo por parámetros

Otra forma de aplicar polimorfismo es cuando en una misma clase se definen varios métodos bajo el mismo nombre pero con la diferencia de que cada uno de ellos recibe una cantidad distinta de parámetros, de acuerdo al número de parámetros recibido será el método que se ejecute.

Por ejemplo si se tienen tres métodos:

public void mostrarInfo() {
    System.out.print("Método sin parámetros");
}

public void mostrarInfo(parámetro) {
    System.out.print("Método con un parámetro");
}

public void mostrarInfo(parámetro, parámetro2) {
    System.out.print("Método con dos parámetros");
}


Éstos aunque tengan el mismo nombre pueden hacer cosas distintas y al momento de llamarlos, se ejecutará aquel que coincida con el número de parámetros que se le pase.

Por ejemplo si invocamos al método sin ningún parámetro, así:
mostrarInfo();

Se ejecutará el primero, el que no recibe parámetros, en este caso imprimiendo:
"Método sin parámetros"

Si invocamos al método pasándole un parámetro:
mostrarInfo(<parámetro>);

Se ejecutará el segundo método, el que sólo recibe un parámetro, este imprimirá:
"Método con un parámetro"

Si invocamos al método pasándole dos parámetros:
mostrarInfo(<parámetro1>, <parámetro2>);

Se ejecutará el tercer método que recibe dos parámetros, imprimiendo:
"Método con dos parámetros"


■ En Java

En el siguiente ejemplo solo se tiene una subclase "Libro" con 13 atributos alucivos al libro y tres métodos con el mismo nombre llamados "verLibro()".

El primero no recibe parámetros y lo que hace es mostrar el libro completo, es decir mostrar todos los atributos del objeto libro.

El segundo recibe un parámetro, en este caso un valor boleano no importa si es true o false, solo necesita recibir un valor para identificarse respecto al primer método que no recibe nada o al tercero que recibe dos parámetros, este método lo que hace es mostrar solo los atributos principales del libro, en este caso solo cinco de ellos.

El tercero recibe dos parámetros igual boleanos, sin importar su valor, este es un intermedio entre los dos métodos anteriores, muestra más que solo los básicos, en este caso ocho de ellos.

class Libro {
    String titulo;
    String subtitulo;
    String autor;
    String editorial;
    String descripcion;
    String isbn;
    int año;
    String edicion;
    String categoria;
    String idioma;
    String pais;
    int paginas;
    double costo;
    public Libro(
        String _titulo, String _subtitulo,
        String _autor, String _editorial,
        String _descripcion, String _isbn,
        int _año, String _edicion,
        String _categoria, String _idioma,
        String _pais, int _paginas, double _costo
    ) {
        this.titulo = _titulo;
        this.subtitulo = _subtitulo;
        this.autor = _autor;
        this.editorial = _editorial;
        this.descripcion = _descripcion;
        this.isbn = _isbn;
        this.año = _año;
        this.edicion = _edicion;
        this.categoria = _categoria;
        this.idioma = _idioma;
        this.pais = _pais;
        this.paginas = _paginas;
        this.costo = _costo;
    }
    // Métodos (Polimorfismo)
    public void verLibro() {
        System.out.println();
        System.out.println("Título: \t" + this.titulo);
        System.out.println("Subtítulo: \t" + this.subtitulo);
        System.out.println("Autor: \t\t" + this.autor);
        System.out.println("Editorial: \t" + this.editorial);
        System.out.println("Descripción: \t" + this.descripcion);
        System.out.println("ISBN: \t\t" + this.isbn);
        System.out.println("Año: \t\t" + this.año);
        System.out.println("Edición: \t" + this.edicion);
        System.out.println("Categoría: \t" + this.categoria);
        System.out.println("Idioma: \t" + this.idioma);
        System.out.println("País: \t\t" + this.pais);
        System.out.println("Páginas: \t" + this.paginas);
        System.out.println("Costo: \t\t" + this.costo);
        System.out.println();
    }
    public void verLibro(boolean _parcial) {
        System.out.println();
        System.out.println("Título: \t" + this.titulo);
        System.out.println("Autor: \t\t" + this.autor);
        System.out.println("Editorial: \t" + this.editorial);
        System.out.println("ISBN: \t\t" + this.isbn);
        System.out.println("Costo: \t\t" + this.costo);
        System.out.println();
    }
    public void verLibro(boolean _parcial, boolean _semicompleto) {
        System.out.println();
        System.out.println("Título: \t" + this.titulo);
        System.out.println("Subtítulo: \t" + this.subtitulo);
        System.out.println("Autor: \t\t" + this.autor);
        System.out.println("Editorial: \t" + this.editorial);
        System.out.println("Descripción: \t" + this.descripcion);
        System.out.println("ISBN: \t\t" + this.isbn);
        System.out.println("Año: \t\t" + this.año);
        System.out.println("Costo: \t\t" + this.costo);
        System.out.println();
    }
}

public class Polimorfismo {
    public static void main (String args[]) {
        Libro libro = new Libro(
            "La Biblia de Java",
            "Aprende Java desde el inicio de los tiempos",
            "John Doe",
            "Educativa",
            "El lenguaje Java de la A a la Z",
            "128 256 512 102 401",
            2018,
            "Segunda",
            "Programación",
            "Español",
            "México",
            369,
            256.5
        );
        libro.verLibro();
        libro.verLibro(true);
        libro.verLibro(true, true);
    }
}


En la clase principal se crea un objeto de la clase "Libro" e inmediatamente se invocan sus tres métodos del mismo nombre, al primero no se le pasan parámetros, al segundo se le pasa un parámetro y al tercero se le pasan dos.

El que no recibe parámetros mostrará todos los datos del libro.
El que recibe un parámetro solo mostrará: título, autor, editorial, isbn y costo, algo así como los datos principales del libro.
El que recibe dos parámetros mostrará: título, subtítulo, autor, editorial, descripción, isbn, año y costo, es decir, un poco más de información que el anterior pero sin mostrar todo.

La salida en consola será:



No hay comentarios:

Publicar un comentario