logo

Sobrecarga de métodos en Java

  1. Diferentes formas de sobrecargar el método.
  2. Al cambiar el no. de argumentos
  3. Cambiando el tipo de datos
  4. Por qué no es posible la sobrecarga de métodos cambiando el tipo de retorno
  5. ¿Podemos sobrecargar el método principal?
  6. sobrecarga de métodos con promoción de tipo

si un clase tiene múltiples métodos que tienen el mismo nombre pero diferentes parámetros, se conoce como Sobrecarga de métodos .

Si tenemos que realizar solo una operación, tener el mismo nombre de los métodos aumenta la legibilidad del programa .

pilas de java

Supongamos que tiene que realizar la suma de los números dados, pero puede haber cualquier número de argumentos. Si escribe el método como a(int,int) para dos parámetros y b(int,int,int) para tres parámetros, entonces Puede resultarle difícil a usted y a otros programadores comprender el comportamiento del método porque su nombre difiere.

Entonces, realizamos una sobrecarga de métodos para descubrir el programa rápidamente.

sobrecarga de métodos java

Ventaja de la sobrecarga de métodos

Sobrecarga de métodos aumenta la legibilidad del programa .

Diferentes formas de sobrecargar el método.

Hay dos formas de sobrecargar el método en java.

  1. Cambiando el número de argumentos
  2. Cambiando el tipo de datos

En Java, la sobrecarga de métodos no es posible cambiando únicamente el tipo de retorno del método.


1) Sobrecarga de métodos: cambiando no. de argumentos

En este ejemplo, hemos creado dos métodos, el primer método add() realiza la suma de dos números y el segundo método add realiza la suma de tres números.

En este ejemplo, estamos creando métodos estáticos para que no necesitemos crear una instancia para llamar a métodos.

 class Adder{ static int add(int a,int b){return a+b;} static int add(int a,int b,int c){return a+b+c;} } class TestOverloading1{ public static void main(String[] args){ System.out.println(Adder.add(11,11)); System.out.println(Adder.add(11,11,11)); }} 
Pruébalo ahora

Producción:

 22 33 


2) Sobrecarga de métodos: cambiar el tipo de datos de los argumentos

En este ejemplo, hemos creado dos métodos que se diferencian en Pruébalo ahora

Producción:

 22 24.9 

P) ¿Por qué no es posible la sobrecarga de métodos cambiando únicamente el tipo de retorno del método?

En Java, la sobrecarga de métodos no es posible cambiando el tipo de retorno del método solo debido a la ambigüedad. Veamos cómo puede ocurrir la ambigüedad:

 class Adder{ static int add(int a,int b){return a+b;} static double add(int a,int b){return a+b;} } class TestOverloading3{ public static void main(String[] args){ System.out.println(Adder.add(11,11));//ambiguity }} 
Pruébalo ahora

Producción:

 Compile Time Error: method add(int,int) is already defined in class Adder 

System.out.println(Adder.add(11,11)); //Aquí, ¿cómo puede Java determinar qué método sum() debe llamarse?

Nota: El error en tiempo de compilación es mejor que el error en tiempo de ejecución. Entonces, el compilador de Java genera un error de tiempo del compilador si declara el mismo método con los mismos parámetros.

¿Podemos sobrecargar el método java main()?

Sí, por sobrecarga de métodos. Puede tener cualquier número de métodos principales en una clase mediante la sobrecarga de métodos. Pero JVM llama al método main() que recibe una matriz de cadenas solo como argumentos. Veamos el ejemplo sencillo:

 class TestOverloading4{ public static void main(String[] args){System.out.println('main with String[]');} public static void main(String args){System.out.println('main with String');} public static void main(){System.out.println('main without args');} } 
Pruébalo ahora

Producción:

 main with String[] 

Sobrecarga de métodos y promoción de tipos

Un tipo se promueve a otro implícitamente si no se encuentra ningún tipo de datos coincidente. Entendamos el concepto mediante la figura que se muestra a continuación:

Sobrecarga de métodos Java con promoción de tipos

Como se muestra en el diagrama anterior, el byte se puede promover a corto, int, largo, flotante o doble. El tipo de datos corto se puede promover a int, long, float o double. El tipo de datos char se puede promover a int,long,float o double, etc.

Ejemplo de sobrecarga de métodos con TypePromotion

 class OverloadingCalculation1{ void sum(int a,long b){System.out.println(a+b);} void sum(int a,int b,int c){System.out.println(a+b+c);} public static void main(String args[]){ OverloadingCalculation1 obj=new OverloadingCalculation1(); obj.sum(20,20);//now second int literal will be promoted to long obj.sum(20,20,20); } } 
Pruébalo ahora
 Output:40 60 

Ejemplo de sobrecarga de métodos con promoción de tipo si se encuentra una coincidencia

Si hay argumentos de tipo coincidentes en el método, no se realiza la promoción de tipo.

 class OverloadingCalculation2{ void sum(int a,int b){System.out.println('int arg method invoked');} void sum(long a,long b){System.out.println('long arg method invoked');} public static void main(String args[]){ OverloadingCalculation2 obj=new OverloadingCalculation2(); obj.sum(20,20);//now int arg sum() method gets invoked } } 
Pruébalo ahora
 Output:int arg method invoked 

Ejemplo de sobrecarga de métodos con promoción de tipo en caso de ambigüedad

Si no hay argumentos de tipo coincidente en el método y cada método promueve un número similar de argumentos, habrá ambigüedad.

clave primaria y clave compuesta en sql
 class OverloadingCalculation3{ void sum(int a,long b){System.out.println('a method invoked');} void sum(long a,int b){System.out.println('b method invoked');} public static void main(String args[]){ OverloadingCalculation3 obj=new OverloadingCalculation3(); obj.sum(20,20);//now ambiguity } } 
Pruébalo ahora
 Output:Compile Time Error 

Un tipo no se despromociona implícitamente, por ejemplo, el doble no se puede despromocionar a ningún tipo implícitamente.