👨‍💻
Coding Library
  • 👨‍💻Coding Library
  • 👾Linux
    • Basic Commands
    • Other commands
      • Ls
      • Mv
      • Chmod
      • Ln
      • Cat
      • Wc
      • Grep
      • Sed
      • Find
    • Sistema de ficheros
      • Inodos
  • 📦Git
    • Page 3
  • 🖊️Vim
    • Vim Basics
      • Gramatica de Vim
      • Moviendote por un archivo
    • Todo y mas
  • 🏛️C
    • Estructuras de datos
      • Listas Enlazadas
      • Colas
      • Pilas
      • Arboles
    • Valgrind
    • Operadores de bits
    • Procesos e Hilos
      • Fork
      • Wait
      • Waitpid
      • Semáforos
      • Estructura sigaction
      • Signals
    • MiniLibX
      • Ventanas (windows)
      • Imprimir Pixels
      • Imagenes
      • Colores
      • Eventos
      • Loops (bucles)
      • Leer imagenes
    • Readline
    • Funciones
      • opendir
      • access
    • Network Programming
      • Structs
      • Llamadas al sistema
      • Synchronous I/O Multiplexing
        • kqueue
  • 🌃C++
    • Clases
      • Herencia
      • Shallow and deeps copies
      • Clases abstractas y Interfaces
      • Reasignar operadores
    • Punteros y referencias
    • Manejo de ficheros
    • Punteros a funciones
    • Excepciones
    • Casting
    • Templates
    • Templated Containers
      • Iterators
      • std::vector
      • std::list
      • std::map
  • 🧠Pyhton
    • Sintaxis basica
    • Scripts
    • Tipos de datos
      • Listas
      • Set
      • Diccionarios
      • Generadores
    • Estructuras de control
      • Iterar con For
      • Iterar con zip
      • Iterar con enumerate
    • Map, Filter and Reduce
    • Funciones
    • Clases
      • Metodos
      • Herencia
    • Formateo con {} y format()
    • Decoradores
  • 📦JAVA
    • Conceptos basicos
    • Programacion estructurada
    • Clases predefinidas
    • POO
      • Clases
      • Herencia
      • Polimorfismo
      • Abstraccion
      • Encapsulacion
    • ArrayList
    • Excepciones
  • ⚒️HTML
    • HTML Basics
    • Elementos de bloque
      • Titulos y parrafos
      • Header, Main y Footer
      • Section, article y aside
    • Elementos en línea
    • Atributos
    • Enlaces <a>
    • Listas
    • Tablas
    • Formularios
      • Input
      • Select y datalist
      • GET y POST
    • Contenido embebido
      • Imagenes
      • Audio y video
      • Iframe
  • 🎨CSS
    • Introduccion
    • Selectores
    • Como funciona CSS
    • Box Model
    • Desbordamiento y Colapso de margenes
    • Display
    • Position
    • Medidas absolutas y relativas
  • 🟡JavaScript
    • Promesas
    • Async/Await
  • 📲Svelte
    • Componentes
    • Reactividad
    • Directivas
    • Eventos
  • 🖥️Sistemas
    • Particiones
  • 🕸️Redes
    • IP Adress
    • Subnet Mask
  • 🕷️Web Scrapping
    • Scrapy
      • Spiders
        • CrawlerSpider
      • Process data
      • Save data
        • CSV y JSON
        • SQLite
    • Splash
    • Selenium
Powered by GitBook
On this page
  • ¿Que es el polimorfismo?
  • Concepto Fundamental del Polimorfismo:
  • Polimorfismo con Herencia y Sobreescritura:
  • Interfaces y Polimorfismo:
  • Ventajas del Polimorfismo:
  • Consideraciones de Diseño:
  1. JAVA
  2. POO

Polimorfismo

PreviousHerenciaNextAbstraccion

Last updated 1 year ago

El polimorfismo es uno de los conceptos fundamentales de la programación orientada a objetos (POO) en Java. Este principio permite que objetos de diferentes clases se utilicen de manera uniforme, proporcionando flexibilidad y extensibilidad en el código. En este post, exploraremos los aspectos clave del polimorfismo en Java y cómo se utiliza para crear aplicaciones más dinámicas y mantenibles.

¿Que es el polimorfismo?

En programación, el polimorfismo es un concepto que nos permite tratar diferentes tipos de objetos de manera uniforme. Imagina tener una interfaz común para realizar ciertas acciones, como "hacer un sonido" o "nadar", independientemente de si estamos trabajando con un perro, un gato o un pez. El polimorfismo simplifica el código al permitir que objetos de clases distintas se utilicen de manera similar, ofreciendo flexibilidad y facilitando la gestión de diferentes tipos de datos.

El polimorfisomo significa que dos clases sobreescriban una funcion heredada del mismo padre, es decir que dos funciones tengan la misma funcion, peor que haga distintas cosas.

Concepto Fundamental del Polimorfismo:

El polimorfismo significa "muchas formas". En Java, hay dos tipos principales de polimorfismo: polimorfismo de compilación (estático) y polimorfismo de ejecución (dinámico).

  • Polimorfismo de Compilación (Estático):

    • Ocurre durante la compilación.

    • Se refiere al uso de sobrecarga de métodos y métodos estáticos.

  • Polimorfismo de Ejecución (Dinámico):

    • Ocurre durante la ejecución.

    • Se refiere al uso de herencia y sobreescritura de métodos.

Polimorfismo con Herencia y Sobreescritura:

class Animal {
    void hacerSonido() {
        System.out.println("Haciendo un sonido");
    }
}

class Perro extends Animal {
    @Override
    void hacerSonido() {
        System.out.println("El perro hace un ladrido");
    }
}

class Gato extends Animal {
    @Override
    void hacerSonido() {
        System.out.println("El gato hace un maullido");
    }
}

En este ejemplo, las clases Perro y Gato heredan de la clase Animal y sobrescriben el método hacerSonido(). Por ende, a la hora de utilizarlas, cada una realizara un distinta accion, aunque sean invocadas de la misma manera:

javaCopy codeAnimal miAnimal;

miAnimal = new Perro();
miAnimal.hacerSonido();  // Llama al método de la clase Perro

miAnimal = new Gato();
miAnimal.hacerSonido();  // Llama al método de la clase Gato

Aquí, miAnimal es una referencia polimórfica que puede apuntar a instancias de Perro o Gato. El método llamado dependerá del tipo real del objeto en tiempo de ejecución.

Interfaces y Polimorfismo:

interface Nadador {
    void nadar();
}

class Pato implements Nadador {
    @Override
    public void nadar() {
        System.out.println("El pato nada en el agua");
    }
}

class Pez implements Nadador {
    @Override
    public void nadar() {
        System.out.println("El pez nada con aletas");
    }
}

Las interfaces también permiten el polimorfismo, ya que las clases que implementan una interfaz pueden ser referenciadas a través de la interfaz.

Ventajas del Polimorfismo:

  1. Flexibilidad:

    • Permite el uso de un solo tipo de referencia para objetos de diferentes clases, facilitando la extensión y mantenimiento del código.

  2. Desacoplamiento:

    • Reduce la dependencia entre clases, ya que las referencias pueden ser de tipo más general.

  3. Extensibilidad:

    • Facilita la incorporación de nuevas clases sin afectar el código existente.

Consideraciones de Diseño:

  1. Uso Responsable:

    • Aplica polimorfismo de manera efectiva donde sea lógico y necesario.

  2. Sobreescritura Coherente:

    • Al sobrescribir métodos, asegúrate de mantener la coherencia con el contrato de la superclase o interfaz.

📦