Lecciones del módulo (2/2)
Métodos y Sobrecarga
Los métodos definen el comportamiento de un objeto. Podemos verlos como funciones declaradas dentro de una clase que operan sobre los campos de instancia del objeto o sobre los parámetros de entrada.
Definir un Método
Un método en Java está compuesto por:
- Modificador de acceso (ej.
public,private). - Tipo de retorno (ej.
int,String, ovoidsi no devuelve nada). - Nombre del método en
camelCase. - Parámetros encerrados entre paréntesis.
- Cuerpo del método encerrado entre llaves.
class Person {
String name;
public Person(String name) {
this.name = name;
}
// Metodo con tipo di ritorno String
public String greet() {
return "Ciao, mi chiamo " + name;
}
}
Llamar a un Método
Para invocar un método sobre un objeto creado, usamos la sintaxis del punto .:
public class Main {
public static void main(String[] args) {
Person p = new Person("Marco");
String message = p.greet(); // Chiamata del metodo
System.out.println(message);
}
}
Sobrecarga de Métodos (Method Overloading)
En Java, dos o más métodos dentro de la misma clase pueden tener el mismo nombre, siempre que tengan una lista de parámetros diferente (por número, orden o tipo de parámetros). Este concepto se conoce como Sobrecarga (Overloading).
El compilador decidirá qué método invocar analizando los argumentos pasados durante la llamada.
class Printer {
// Metodo per stampare un intero
public void printValue(int number) {
System.out.println("Intero: " + number);
}
// Metodo sovraccaricato per stampare una stringa
public void printValue(String text) {
System.out.println("Testo: " + text);
}
}
Paso de Parámetros por Valor
En Java, todos los parámetros se pasan por valor (pass-by-value). Esto significa que cuando se pasa un argumento a un método, Java crea una copia del valor de la variable y la pasa al método.
- Para los tipos primitivos, el valor original fuera del método nunca cambia, incluso si se modifica dentro del método.
- Para los objetos/referencias, se copia la referencia al objeto. Esto significa que, aunque no podemos cambiar la dirección a la que apunta el objeto original, sí podemos modificar su estado interno (ej. los campos) y los cambios serán visibles fuera.
Limitaciones de la Sobrecarga: El Tipo de Retorno
Es importante destacar que no es posible sobrecargar un método basándose únicamente en el tipo de retorno. Por ejemplo, el siguiente código generará un error de compilación:
class Example {
// ERRORE: La firma dei due metodi è considerata identica
public int getNumber() { return 42; }
public double getNumber() { return 42.0; }
}
El compilador necesita distinguir los métodos únicamente en función de los parámetros para decidir qué versión llamar en tiempo de compilación (la sobrecarga se resuelve completamente en tiempo de compilación).
Pruébalo tú
Añade a la clase Calculator un método public int add(int a, int b) que devuelva la suma de los dos números. En el main llama al método sobre el objeto calc y asigna el resultado a una variable entera.
Mostrar pista
Declara el método como `public int add(int a, int b) { return a + b; }` e invócalo en el main como `int result = calc.add(5, 10);`.
Solución disponible después de 3 intentos
Haz la sobrecarga del método add en la clase Calculator creando otro método que acepte dos double y devuelva su suma.
Mostrar pista
Escribe `public double add(double a, double b) { return a + b; }` justo debajo del primer método add.
Solución disponible después de 3 intentos
Añade a la clase Calculator un método public int multiply(int a, int b) que devuelva el producto de los dos números. En el main llama al método sobre el objeto calc y asigna el resultado a una variable entera.
Mostrar pista
Declara el método como `public int multiply(int a, int b) { return a * b; }` e invócalo en el main como `int result = calc.multiply(5, 10);`.
Solución disponible después de 3 intentos