El concepto de Java Overload es muy conocido por todos los programadores . Java nos permite declarar el mismo método pero con diferentes tipo o número de argumentos en una clase. Esto nos aporta una gran flexibilidad ya que simplifica el número de métodos de los cuales tenemos que acordarnos . Vamos a abordar algunos ejemplos y peculiaridades que soporta.
Java Overload Básico
Vamos a usar la tabla Libro para hablar del concepto de overload
package com.arquitecturajava.ejemplo1; public class Libro { private int paginas; private String titulo; private int paginaActual; public int getPaginaActual() { return paginaActual; } public void setPaginaActual(int paginaActual) { this.paginaActual = paginaActual; } public Libro(int paginas, String titulo) { super(); this.paginas = paginas; this.titulo = titulo; } public int getPaginas() { return paginas; } public void setPaginas(int paginas) { this.paginas = paginas; } public String getTitulo() { return titulo; } public void setTitulo(String titulo) { this.titulo = titulo; } public void avanzar() { paginaActual++; } public void avanzar(int numero) { paginaActual += numero; } }
Acabamos de construir el ejemplo más sencillo de overload. Tenemos un método que soporta que le pasemos 0 o 1 parámetro para avanzar página.
Dependiendo de si pasamos un valor o no se ejecuta un método u otro y avanzamos una o más páginas:
package com.arquitecturajava; public class Ejemplo001 { public static void main(String[] args) { // TODO Auto-generated method stub Libro l= new Libro(250,"java"); l.avanzar(); l.avanzar(5); System.out.println(l.getPaginaActual()); } }
Hemos avanzado seis páginas:
De igual forma se admitiría el paso de varios parámetros por ejemplo para definir el punto de inicio y el bloque de páginas avanzadas.
public void avanzar(int inicio, int paginas) { paginas = inicio + paginas; }
Hasta aquí todo es muy sencillo . Sin embargo cuando a uno le preguntan en un examen de certificación las cosas se pueden complicar. ¿Es válido tener por ejemplo los siguientes dos métodos?
public void avanzar(int numero) { paginaActual += numero; } public void avanzar(long numero) { paginaActual+=numero; }
Si no hay ningún problema ya que son tipos diferentes. ¿Y si fuera de esta manera?
public void avanzar(int numero) { System.out.println("basico") paginaActual += numero; } public void avanzar(Integer numero) { System.out.println("objeto") paginaActual+=numero; }
Java Overload curiosidades
Tampoco sería un problema los métodos están soportados aunque no tenga mucho sentido usarlos de esta forma. ¿Qué pasaría si el programa principal fuera así?:
Libro l= new Libro(250,"java"); short numero1= 5; Short numero= new Short(numero1); l.avanzar(numero);
Este ejemplo es ya más complejo y suele ser una pregunta habitual de un examen de certificación: Las respuestas posibles son.
- Se ejecuta el método avanzar(Integer numero)
- Se ejecuta el método avanzar (int numero)
- No compila porque no hay ningún método que soporte short
- No compila porque no puede existir un método Integer y uno int
Como vemos las respuestas nos generan bastantes dudas. ¿Cual es la buena? .En este caso la máquina virtual comprueba que no existe ningún método que corresponda con un objeto Short. Al no existir el método se realiza un outboxing y se convierte el objeto Short en un tipo básico short. Lamentablemente para este no existe tampoco un método concreto . Sin embargo Java realizará una promoción del tipo básico short al tipo básico int. Ahora si que existe un método que puede encajar. Recordemos que short es más pequeño que int y promocionarlo no da ningún problema.
Así pues si ejecutamos el programa por pantalla imprimirá:
La respuesta correcta era la 2 .Como vemos incluso cosas muy sencillas se pueden complicar cuando entramos a detalle , en este caso el concepto de Java Overload 🙂
Otros artículos relacionados:
Qué gran artículo! Están muy bien estos ejemplos de certificación. Por favor, pública más artículos así!!
Gracias!!
gracias me apunto la idea 🙂
Me ha encantado este artículo añadiendo una pregunta tipo examen.
Cuando decimos outboxing estamos diciendo casting?
Saludos
No , el outboxing es una conversión automática de un objeto a un tipo básico
outboxing? promocion? No sabia que existían. Muchas gracias por el articulo.
me alegro que fuera de tu utilidad 😉