"¡Hola, Amigo! Te voy a hablar sobre la sobrecarga de métodos ".

"¡¿También puedes sobrecargarlos?! ¡Qué día!"

"Puedes hacer mucho con ellos, pero no entraremos en eso ahora".

"Es un trato."

"La sobrecarga es una operación muy simple. En realidad, ni siquiera es una operación sobre métodos, aunque a veces se le conoce con un nombre aterrador: polimorfismo paramétrico ".

Lo que debe recordar es que cada método en una clase debe tener un nombre único.

"Si lo se."

"Bueno, eso no es del todo cierto. Quiero decir, no es del todo cierto. Un método no tiene que tener un nombre único. Lo que debe ser único es la combinación de un nombre de método y los tipos de sus parámetros . Esta combinación también es conocida como una firma de método".

Código Comentarios
public void print();
public void print2();
Esto está permitido. Los dos métodos tienen nombres únicos.
public void print();
public void print(int n);
Y esto también está permitido. Los dos métodos tienen nombres únicos (firmas).
public void print(int n, int n2);
public void print(int n);
Los nombres de los métodos siguen siendo únicos aquí.
public int print(int a);
public void print(int n);
Pero esto no está permitido. Los métodos no son únicos, aunque se pasan diferentes tipos.
public int print(int a, long b);
public long print(long b, int a);
Pero esto está permitido. Los parámetros del método son únicos.

"Ya he visto eso en alguna parte".

"Sí. Cuando escribe " System.out.println ", IntelliJ IDEA sugiere un par de docenas de versiones de métodos de impresión que usan diferentes parámetros. El compilador simplemente identifica y luego llama al método requerido según los tipos de parámetros que pasa".

"Eso no es tan difícil. Pero no es polimorfismo".

"O más exactamente, no es un método de anulación".

Por cierto, quiero señalar que los nombres de los parámetros son irrelevantes. Se pierden durante la compilación. Una vez que se cumple un método, solo se conocen su nombre y tipos de parámetros.