Fundamentos de sobrecarga de métodos
Parte de la sección Programación Orientada a Objetos del Journey de Java de Coddy. Lección 28 de 87.
Polimorfismo significa "muchas formas". En Java, permite que los objetos se comporten de manera diferente según el contexto. Una forma de polimorfismo es la sobrecarga de métodos, también llamada polimorfismo en tiempo de compilación porque Java determina qué método llamar durante la compilación.
La sobrecarga de métodos le permite definir múltiples métodos con el mismo nombre pero diferentes parámetros. El compilador los distingue basándose en el número, tipo o el orden de los parámetros:
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public int add(int a, int b, int c) {
return a + b + c;
}
public double add(double a, double b) {
return a + b;
}
}Cuando llamas a add(5, 3), Java usa el primer método. Al llamar a add(5, 3, 2) se activa el segundo, y add(5.0, 3.0) invoca el tercero. El compilador elige la versión correcta basándose en los argumentos que proporciones.
Ten en cuenta que cambiar solo el tipo de retorno no es una sobrecarga válida. La lista de parámetros debe ser diferente:
// NO es una sobrecarga válida - no compilará
public int getValue() { return 1; }
public double getValue() { return 1.0; } // ¡Error!De hecho, ya has visto la sobrecarga anteriormente con la sobrecarga de constructores. La sobrecarga de métodos sigue las mismas reglas y proporciona flexibilidad al permitir que un solo nombre de método maneje diferentes escenarios de entrada.
Desafío
FácilConstruyamos un formateador de mensajes que demuestre la sobrecarga de métodos proporcionando varias formas de dar formato a los mensajes. Crearás una clase de utilidad con varios métodos format sobrecargados que gestionen diferentes escenarios de entrada.
Organizarás tu código en dos archivos:
MessageFormatter.java: Crea una clase que proporcione un formato flexible de mensajes mediante métodos sobrecargados. Tu formateador debe tener:- Un método
format(String message)que devuelva el mensaje entre corchetes:[message] - Un método
format(String message, int repeatCount)que devuelva el mensaje repetido el número de veces especificado, separado por espacios - Un método
format(String message, String prefix)que devuelva el mensaje con el prefijo adjunto:prefix: message - Un método
format(String message, String prefix, String suffix)que devuelva:prefix: message (suffix)
- Un método
Main.java: Demuestra cómo funcionan juntos los cuatro métodos sobrecargados. Recibirás cuatro entradas: un mensaje (String), un número de repeticiones (int), un prefijo (String) y un sufijo (String). Crea un MessageFormatter y llama a cada versión del métodoformat, imprimiendo cada resultado en su propia línea:- Primero, da formato usando solo el mensaje
- Segundo, da formato usando el mensaje y el número de repeticiones
- Tercero, da formato usando el mensaje y el prefijo
- Cuarto, da formato usando el mensaje, el prefijo y el sufijo
Recibirás cuatro entradas: el texto del mensaje, cuántas veces repetirlo, una cadena de prefijo y una cadena de sufijo.
Por ejemplo, si el mensaje es "Hello", el número de repeticiones es 3, el prefijo es "INFO" y el sufijo es "done", tu salida debería mostrar cuatro versiones formateadas diferentes del mismo mensaje, cada una usando un método sobrecargado distinto.
Pruébalo tú mismo
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Leer entradas
String message = scanner.nextLine();
int repeatCount = Integer.parseInt(scanner.nextLine());
String prefix = scanner.nextLine();
String suffix = scanner.nextLine();
// TODO: Crear un objeto MessageFormatter
// TODO: Llamar a format solo con el mensaje e imprimir el resultado
// TODO: Llamar a format con el mensaje y repeatCount e imprimir el resultado
// TODO: Llamar a format con el mensaje y el prefijo e imprimir el resultado
// TODO: Llamar a format con el mensaje, el prefijo y el sufijo e imprimir el resultado
}
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de OOP
Archivos externosIntroducción a la OOPClases vs. ObjetosLa palabra clave thisMétodosCampos (Atributos)Método constructorSobrecarga de constructoresResumen - Calculadora simple4Herencia
Herencia básica (extends)La palabra clave superSobrescritura de métodos (@Override)Encadenamiento de constructoresLa clase ObjectHerencia simple y multinivelPor qué no hay herencia múltiple de clasesResumen - Jerarquía de empleados7Métodos especiales y la clase Object
Método toString()equals() y hashCode()Método clone()compareTo() y ComparableInterfaz ComparatorResumen - Ordenamiento personalizado2Modificadores de acceso y encapsulamiento
Visión general de los niveles de accesoMétodos Getter y SetterOcultamiento de informaciónLa palabra clave finalResumen - Gestor de cuentas bancarias5Polimorfismo
Fundamentos de sobrecarga de métodosSobrescritura de métodos (tiempo de ejecución)Upcasting y DowncastingEl operador instanceofClases y métodos abstractosResumen - Calculadora de figuras8Conceptos avanzados de POO
Composición vs. HerenciaAgregación vs. ComposiciónClases internas, anidadas y anónimasEnums y métodos de EnumRecords (Java 16+)Clases selladas (Java 17+)11Patrones de diseño - Parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón BuilderPatrón ObserverPatrón Strategy3Propiedades de clase y miembros estáticos
Variables de instancia vs. estáticasMétodos estáticosBloques estáticosConstantes (static final)Repaso - Contador y utilidad6Interfaces y Clases Abstractas
Introducción a las InterfacesImplementación de InterfacesImplementación de Múltiples InterfacesMétodos Default y Static en InterfacesClases Abstractas vs InterfacesInterfaces FuncionalesResumen - Sistema de Pagos9Genéricos
Introducción a los genéricosClases genéricasMétodos genéricosParámetros de tipo delimitadosComodines (?, extends, super)Resumen - Contenedor genérico12Patrones de diseño Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositePatrón IteratorPractica por tu cuenta: Compilador de Java online