Java
Tutorial Java: Polimorfismo
Java polimorfismo: técnicas y ejemplos. Domina las técnicas de polimorfismo en Java con ejemplos prácticos y detallados.
Aprende Java GRATIS y certifícateEl Polimorfismo es uno de los cuatro pilares fundamentales de la Programación Orientada a Objetos (POO), junto con la Encapsulación, la Herencia y la Abstracción. La palabra "polimorfismo" viene del griego "polys", que significa "muchos", y "morphe", que significa "forma". Por lo tanto, el polimorfismo se puede entender como la capacidad de tomar muchas formas.
En términos de programación, el polimorfismo se refiere a la capacidad de un objeto de comportarse de diferentes formas dependiendo del contexto. En Java, esto se logra principalmente a través de la herencia y las interfaces.
Hay dos tipos de polimorfismo en Java: polimorfismo de tiempo de compilación y polimorfismo de tiempo de ejecución. El polimorfismo de tiempo de compilación se logra a través de la sobrecarga de métodos, mientras que el polimorfismo de tiempo de ejecución se logra a través de la sobrescritura de métodos.
Polimorfismo de tiempo de compilación
El polimorfismo de tiempo de compilación, también conocido como sobrecarga de métodos, permite que dos o más métodos en una misma clase tengan el mismo nombre pero parámetros diferentes. La clave aquí es que el compilador de Java decide qué método llamar en tiempo de compilación, basándose en los argumentos proporcionados.
Un ejemplo en código de esto sería:
class Polimorfismo {
void demo (int a) {
System.out.println ("a: " + a);
}
void demo (int a, int b) {
System.out.println ("a y b: " + a + "," + b);
}
double demo(double a) {
System.out.println("double a: " + a);
return a*a;
}
}
class MetodoPrincipal {
public static void main(String[] args) {
Polimorfismo Obj = new Polimorfismo();
double resultado;
Obj.demo(10);
Obj.demo(10, 20);
resultado = Obj.demo(5.5);
System.out.println("O/P : " + resultado);
}
}
En el código anterior, la clase Polimorfismo
tiene tres métodos llamados demo()
. Pero cada método acepta parámetros diferentes. Cuando se llama a demo(10)
, se ejecuta el primer método. Cuando se llama a demo(10, 20)
, se ejecuta el segundo método. Y cuando se llama a demo(5.5)
, se ejecuta el tercer método.
Polimorfismo de tiempo de ejecución
El polimorfismo de tiempo de ejecución, también conocido como sobrescritura de métodos, se produce cuando una subclase tiene un método que ya existe en su superclase. La sobrescritura de métodos permite que la subclase proporcione su propia implementación para el método existente. La decisión de qué método ejecutar se toma durante la ejecución, no durante la compilación.
Un ejemplo en código de esto sería:
class Animal {
void comer() {
System.out.println("El animal come");
}
}
class Perro extends Animal {
void comer() {
System.out.println("El perro come");
}
}
class TestPolimorfismo {
public static void main(String[] args) {
Animal a = new Animal(); // Animal referencia y objeto
Animal b = new Perro(); // Animal referencia pero objeto Perro
a.comer(); // corre el método en Animal class
b.comer(); // corre el método en Perro class
}
}
En este código, la clase Animal
tiene un método llamado comer()
. La clase Perro
, que hereda de Animal
, también tiene un método llamado comer()
. Cuando se llama al método comer()
en el objeto a
, se ejecuta el método en la clase Animal
. Pero cuando se llama al método comer()
en el objeto b
, se ejecuta el método en la clase Perro
. Esto es porque b
es un objeto de la clase Perro
, aunque se le hace referencia como Animal
.
¿Por qué es útil el polimorfismo?
El polimorfismo es útil por varias razones. Permite que el código sea más reutilizable y más fácil de entender y mantener. También facilita la implementación de código que es agnóstico al tipo de los objetos con los que trabaja.
Por ejemplo, si se tiene un arreglo de objetos Animal
(donde Animal
podría ser una superclase para clases como Perro
, Gato
, Pájaro
, etc.), se podría tener un ciclo que recorra el arreglo y llame al método hablar()
en cada objeto Animal
. Esto haría que cada animal haga su propio sonido, a pesar de que el código del ciclo no tiene que saber específicamente qué tipo de Animal está manejando.
Ejercicios de esta lección Polimorfismo
Evalúa tus conocimientos de esta lección Polimorfismo con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.
Clases abstractas
Streams: reduce()
Streams: flatMap()
Llamada y sobrecarga de funciones
Métodos referenciados
Métodos de la clase String
Representación de Fecha
Operadores lógicos
Tipos de datos
Estructuras de iteración
Streams: forEach()
Objetos
Funciones lambda
Uso de Scanner
CRUD en Java de modelo Customer sobre un ArrayList
Tipos de variables
Streams: collect()
Operadores aritméticos
Interfaz funcional Consumer
API java.nio 2
API Optional
Interfaz funcional Function
Encapsulación
Interfaces
Uso de API Optional
Representación de Hora
Herencia básica
Clases y objetos
Interfaz funcional Supplier
HashMap
Sobrecarga de métodos
Polimorfismo de tiempo de ejecución
OOP en Java
Creación de Streams
Streams: min max
Métodos avanzados de la clase String
Polimorfismo de tiempo de compilación
Excepciones
Herencia avanzada
Estructuras de selección
Uso de interfaces
HashSet
Objeto Scanner
Streams: filter()
Operaciones de Streams
Interfaz funcional Predicate
Streams: sorted()
Configuración de entorno
CRUD en Java de modelo Customer sobre un HashMap
Uso de variables
Clases
Streams: distinct()
Streams: count()
ArrayList
Datos de referencia
Interfaces funcionales
Métodos básicos de la clase String
Instalación
Funciones
Estructuras de control
Herencia de clases
Streams: map()
Funciones y encapsulamiento
Streams: match
Gestión de errores y excepciones
Datos primitivos
Todas las lecciones de Java
Accede a todas las lecciones de Java y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.
Introducción A Javascript
Sintaxis
Tipos De Datos
Sintaxis
Variables
Sintaxis
Operadores
Sintaxis
Estructuras De Control
Sintaxis
Funciones
Sintaxis
Funciones Cierre (Closure)
Sintaxis
Funciones Flecha
Programación Funcional
Filtrado Con Filter() Y Find()
Programación Funcional
Transformación Con Map()
Programación Funcional
Reducción Con Reduce()
Programación Funcional
Clases Y Objetos
Programación Orientada A Objetos
Excepciones
Programación Orientada A Objetos
Encapsulación
Programación Orientada A Objetos
Herencia
Programación Orientada A Objetos
Polimorfismo
Programación Orientada A Objetos
Array
Estructuras De Datos
Conjuntos Con Set
Estructuras De Datos
Mapas Con Map
Estructuras De Datos
Manipulación Dom
Dom
Selección De Elementos Dom
Dom
Modificación De Elementos Dom
Dom
Eventos Del Dom
Dom
Callbacks
Programación Asíncrona
Promises
Programación Asíncrona
Async / Await
Programación Asíncrona
Instalación De Java
Introducción Y Entorno
Configuración De Entorno Java
Introducción Y Entorno
Ecosistema Jakarta Ee De Java
Introducción Y Entorno
Tipos De Datos
Sintaxis
Variables
Sintaxis
Operadores
Sintaxis
Estructuras De Control
Sintaxis
Funciones
Sintaxis
Excepciones
Programación Orientada A Objetos
Clases Y Objetos
Programación Orientada A Objetos
Encapsulación
Programación Orientada A Objetos
Herencia
Programación Orientada A Objetos
Clases Abstractas
Programación Orientada A Objetos
Interfaces
Programación Orientada A Objetos
Sobrecarga De Métodos
Programación Orientada A Objetos
Polimorfismo
Programación Orientada A Objetos
La Clase Scanner
Programación Orientada A Objetos
Métodos De La Clase String
Programación Orientada A Objetos
Listas
Framework Collections
Conjuntos
Framework Collections
Mapas
Framework Collections
Funciones Lambda
Programación Funcional
Interfaz Funcional Consumer
Programación Funcional
Interfaz Funcional Predicate
Programación Funcional
Interfaz Funcional Supplier
Programación Funcional
Interfaz Funcional Function
Programación Funcional
Métodos Referenciados
Programación Funcional
Creación De Streams
Programación Funcional
Operaciones Intermedias Con Streams: Map()
Programación Funcional
Operaciones Intermedias Con Streams: Filter()
Programación Funcional
Operaciones Intermedias Con Streams: Distinct()
Programación Funcional
Operaciones Finales Con Streams: Collect()
Programación Funcional
Operaciones Finales Con Streams: Min Max
Programación Funcional
Operaciones Intermedias Con Streams: Flatmap()
Programación Funcional
Operaciones Intermedias Con Streams: Sorted()
Programación Funcional
Operaciones Finales Con Streams: Reduce()
Programación Funcional
Operaciones Finales Con Streams: Foreach()
Programación Funcional
Operaciones Finales Con Streams: Count()
Programación Funcional
Operaciones Finales Con Streams: Match
Programación Funcional
Api Optional
Programación Funcional
Api Java.nio 2
Entrada Y Salida (Io)
Api Java.time
Api Java.time
Certificados de superación de Java
Supera todos los ejercicios de programación del curso de Java y obtén certificados de superación para mejorar tu currículum y tu empleabilidad.
En esta lección
Objetivos de aprendizaje de esta lección
- Entender el concepto de Polimorfismo en la Programación Orientada a Objetos (POO).
- Aprender a implementar el polimorfismo de tiempo de compilación mediante la sobrecarga de métodos en Java.
- Aprender a implementar el polimorfismo de tiempo de ejecución mediante la sobrescritura de métodos en Java.
- Comprender cómo y por qué se utiliza el polimorfismo en el desarrollo de software.
- Aprender a identificar situaciones en las que el polimorfismo puede hacer que el código sea más eficiente y flexible.