Métodos Avanzados y Varargs
La sobrecarga de métodos (method overloading) permite tener varios métodos con el mismo nombre pero diferentes parámetros. Java elige cuál llamar según los tipos de argumentos en compilación. Es diferente al override (sobreescritura), que redefine un método heredado en tiempo de ejecución.
Los varargs (int... numeros) permiten pasar un número variable de argumentos y el método los recibe como array, evitando tener que crear el array explícitamente en el código que llama.
Un concepto clave en Java: los primitivos se pasan por valor (se copia el número) y los objetos se pasan por referencia (se copia la dirección de memoria, pero apunta al mismo objeto). Esto significa que si modificas un int dentro de un método, no afecta el original.
Pero si modificas el contenido de un array u objeto recibido como parámetro, sí afectas el original porque ambos apuntan al mismo lugar en memoria. Este comportamiento es la fuente de muchos bugs sutiles para principiantes.
public class MetodosEjemplos {
// Sobrecarga de métodos (overloading)
public static int sumar(int a, int b) { return a + b; }
public static double sumar(double a, double b) { return a + b; }
public static int sumar(int a, int b, int c) { return a + b + c; }
// Varargs - número variable de argumentos
public static int sumarTodos(int... numeros) {
int total = 0;
for (int n : numeros) total += n;
return total;
}
// Retornar múltiples valores con array
public static int[] minMax(int[] arr) {
int min = arr[0], max = arr[0];
for (int n : arr) {
if (n < min) min = n;
if (n > max) max = n;
}
return new int[]{min, max};
}
// Recursión
public static int factorial(int n) {
if (n <= 1) return 1; // Caso base
return n * factorial(n - 1); // Caso recursivo
}
public static int fibonacci(int n) {
if (n <= 1) return n;
return fibonacci(n-1) + fibonacci(n-2);
}
// Paso por valor (primitivos)
public static void incrementar(int x) { x++; } // No afecta original
// Paso por referencia (objetos)
public static void modificar(int[] arr) {
arr[0] = 999; // SÍ afecta el original
}
public static void main(String[] args) {
System.out.println(sumar(3, 4)); // 7 (int)
System.out.println(sumar(3.0, 4.5)); // 7.5 (double)
System.out.println(sumarTodos(1,2,3,4,5)); // 15
System.out.println(factorial(5)); // 120
}
}
Practica esta lección
Resuelve los ejercicios del curso de Java en la app, gratis y con corrección automática.
Empezar a practicar