En Java, la sobrecarga de métodos permite que diferentes métodos tengan el mismo nombre, pero diferentes firmas, donde la firma puede diferir según la cantidad de parámetros de entrada o el tipo de parámetros de entrada, o una combinación de ambos.
La sobrecarga de métodos en Java también se conoce como Polimorfismo en tiempo de compilación , Polimorfismo estático o Encuadernación anticipada . En la sobrecarga de métodos en comparación con el argumento principal, el argumento secundario tendrá la máxima prioridad.
Ejemplo de sobrecarga de métodos
Java
// Java program to demonstrate working of method> // overloading in Java> > public> class> Sum {> > // Overloaded sum(). This sum takes two int parameters> > public> int> sum(> int> x,> int> y) {> return> (x + y); }> > > // Overloaded sum(). This sum takes three int parameters> > public> int> sum(> int> x,> int> y,> int> z)> > {> > return> (x + y + z);> > }> > > // Overloaded sum(). This sum takes two double> > // parameters> > public> double> sum(> double> x,> double> y)> > {> > return> (x + y);> > }> > > // Driver code> > public> static> void> main(String args[])> > {> > Sum s => new> Sum();> > System.out.println(s.sum(> 10> ,> 20> ));> > System.out.println(s.sum(> 10> ,> 20> ,> 30> ));> > System.out.println(s.sum(> 10.5> ,> 20.5> ));> > }> }> |
>
pilas de java
>Producción
30 60 31.0>
Diferentes formas de sobrecarga de métodos en Java
- Cambiar el número de parámetros.
- Cambio de tipos de datos de los argumentos.
- Cambiar el orden de los parámetros de los métodos
1. Cambiar el número de parámetros
La sobrecarga de métodos se puede lograr cambiando la cantidad de parámetros mientras se pasa a diferentes métodos.
A continuación se muestra la implementación del método anterior:
Java
// Java Program to Illustrate Method Overloading> // By Changing the Number of Parameters> > // Importing required classes> import> java.io.*;> > // Class 1> // Helper class> class> Product {> > // Method 1> > // Multiplying two integer values> > public> int> multiply(> int> a,> int> b)> > {> > int> prod = a * b;> > return> prod;> > }> > > // Method 2> > // Multiplying three integer values> > public> int> multiply(> int> a,> int> b,> int> c)> > {> > int> prod = a * b * c;> > return> prod;> > }> }> > // Class 2> // Main class> class> GFG {> > // Main driver method> > public> static> void> main(String[] args)> > {> > // Creating object of above class inside main()> > // method> > Product ob => new> Product();> > > // Calling method to Multiply 2 numbers> > int> prod1 = ob.multiply(> 1> ,> 2> );> > > // Printing Product of 2 numbers> > System.out.println(> > 'Product of the two integer value :'> + prod1);> > > // Calling method to multiply 3 numbers> > int> prod2 = ob.multiply(> 1> ,> 2> ,> 3> );> > > // Printing product of 3 numbers> > System.out.println(> > 'Product of the three integer value :'> + prod2);> > }> }> |
>
>Producción
Product of the two integer value :2 Product of the three integer value :6>
2. Cambiar los tipos de datos de los argumentos
En muchos casos, los métodos se pueden considerar sobrecargados si tienen el mismo nombre pero tienen diferentes tipos de parámetros, los métodos se consideran sobrecargados.
A continuación se muestra la implementación del método anterior:
Java
// Java Program to Illustrate Method Overloading> // By Changing Data Types of the Parameters> > // Importing required classes> import> java.io.*;> > // Class 1> // Helper class> class> Product {> > // Multiplying three integer values> > public> int> Prod(> int> a,> int> b,> int> c)> > {> > int> prod1 = a * b * c;> > return> prod1;> > }> > > // Multiplying three double values.> > public> double> Prod(> double> a,> double> b,> double> c)> > {> > double> prod2 = a * b * c;> > return> prod2;> > }> }> > class> GFG {> > public> static> void> main(String[] args)> > {> > Product obj => new> Product();> > > int> prod1 = obj.Prod(> 1> ,> 2> ,> 3> );> > System.out.println(> > 'Product of the three integer value :'> + prod1);> > > double> prod2 = obj.Prod(> 1.0> ,> 2.0> ,> 3.0> );> > System.out.println(> > 'Product of the three double value :'> + prod2);> > }> }> |
>
>Producción
Product of the three integer value :6 Product of the three double value :6.0>
3. Cambiar el orden de los parámetros de los métodos
La sobrecarga de métodos también se puede implementar reorganizando los parámetros de dos o más métodos sobrecargados. Por ejemplo, si los parámetros del método 1 son (String name, int roll_no) y el otro método es (int roll_no, String name) pero ambos tienen el mismo nombre, entonces se considera que estos 2 métodos están sobrecargados con diferentes secuencias de parámetros. .
A continuación se muestra la implementación del método anterior:
Java
// Java Program to Illustrate Method Overloading> // By changing the Order of the Parameters> > // Importing required classes> import> java.io.*;> > // Class 1> // Helper class> class> Student {> > // Method 1> > public> void> StudentId(String name,> int> roll_no)> > {> > System.out.println(> 'Name :'> + name +> ' '> > +> 'Roll-No :'> + roll_no);> > }> > > // Method 2> > public> void> StudentId(> int> roll_no, String name)> > {> > // Again printing name and id of person> > System.out.println(> 'Roll-No :'> + roll_no +> ' '> > +> 'Name :'> + name);> > }> }> > // Class 2> // Main class> class> GFG {> > // Main function> > public> static> void> main(String[] args)> > {> > // Creating object of above class> > Student obj => new> Student();> > > // Passing name and id> > // Note: Reversing order> > obj.StudentId(> 'Spyd3r'> ,> 1> );> > obj.StudentId(> 2> ,> 'Kamlesh'> );> > }> }> |
>
>Producción
Name :Spyd3r Roll-No :1 Roll-No :2 Name :Kamlesh>
¿Qué pasa si el prototipo exacto no coincide con los argumentos?
En cuanto a las prioridades, el compilador sigue estos pasos:
- Conversión de tipo pero a un tipo superior (en términos de rango) en la misma familia.
- Conversión de tipos a la siguiente familia superior (supongamos que si no hay un tipo de datos largo disponible para un tipo de datos int, buscará el tipo de datos flotante).

Pongamos un ejemplo para aclarar el concepto:
Java
// Demo Class> class> Demo {> > public> void> show(> int> x)> > {> > System.out.println(> 'In int'> + x);> > }> > public> void> show(String s)> > {> > System.out.println(> 'In String'> + s);> > }> > public> void> show(> byte> b)> > {> > System.out.println(> 'In byte'> + b);> > }> }> > class> UseDemo {> > public> static> void> main(String[] args)> > {> > byte> a => 25> ;> > Demo obj => new> Demo();> > > // it will go to> > // byte argument> > obj.show(a);> > > // String> > obj.show(> 'hello'> );> > > // Int> > obj.show(> 250> );> > > // Since char is> > // not available, so the datatype> > // higher than char in terms of> > // range is int.> > obj.show(> 'A'> );> > > // String> > obj.show(> 'A'> );> > > // since float datatype> > // is not available and so it's higher> > // datatype, so at this step their> > // will be an error.> > obj.show(> 7.5> );> > }> }> |
>
>
Producción
./UseDemo.java:46: error: no suitable method found for show(double) obj.show(7.5); ^ method Demo.show(int) is not applicable (argument mismatch; possible lossy conversion from double to int) method Demo.show(String) is not applicable (argument mismatch; double cannot be converted to String) method Demo.show(byte) is not applicable (argument mismatch; possible lossy conversion from double to byte) 1 error>
Ventajas de la sobrecarga de métodos
- La sobrecarga de métodos mejora la legibilidad y la reutilización del programa.
- La sobrecarga de métodos reduce la complejidad del programa.
- Al utilizar la sobrecarga de métodos, los programadores pueden realizar una tarea de manera eficiente y efectiva.
- Al utilizar la sobrecarga de métodos, es posible acceder a métodos que realizan funciones relacionadas con argumentos y tipos ligeramente diferentes.
- Los objetos de una clase también se pueden inicializar de diferentes maneras utilizando los constructores.
Preguntas importantes en Java
P1. ¿Podemos sobrecargar los métodos estáticos?
Respuesta:
La respuesta es ' Sí '. Podemos tener dos o más métodos estáticos con el mismo nombre, pero diferencias en los parámetros de entrada. Por ejemplo, considere el siguiente programa Java. Para saber más sobre esto, consulte el artículo – ¿Podemos sobrecargar o anular métodos estáticos en Java?
P2. ¿Podemos sobrecargar métodos que se diferencian sólo por palabras clave estáticas?
Respuesta:
Nosotros no puedo sobrecargar dos métodos en Java si difieren solo por la palabra clave estática (el número de parámetros y los tipos de parámetros son los mismos). Vea el siguiente programa Java, por ejemplo. Consulte esto para obtener más detalles.
P3. ¿Podemos sobrecargar main() en Java?
Respuesta:
clave primaria y clave compuesta en sql
Al igual que otros métodos estáticos, nosotros poder sobrecargar main() en Java.
Java
// Java program with overloaded main()>
import>
java.io.*;>
>
public>
class>
Test {>
>
// Normal main()>
>
public>
static>
void>
main(String[] args)>
>
{>
>
System.out.println(>
'Hi Geek (from main)'>
);>
>
Test.main(>
'Geek'>
);>
>
}>
>
>
// Overloaded main methods>
>
public>
static>
void>
main(String arg1)>
>
{>
>
System.out.println(>
'Hi, '>
+ arg1);>
>
Test.main(>
'Dear Geek'>
,>
'My Geek'>
);>
>
}>
>
>
public>
static>
void>
main(String arg1, String arg2)>
>
{>
>
System.out.println(>
'Hi, '>
+ arg1 +>
', '>
+ arg2);>
>
}>
}>
>>ProducciónHi Geek (from main) Hi, Geek Hi, Dear Geek, My Geek>
P4. ¿Java admite la sobrecarga del operador?
Respuesta:
A diferencia de C++, Java no permite operadores sobrecargados definidos por el usuario. Internamente, Java sobrecarga los operadores, por ejemplo, + está sobrecargado para la concatenación.
P5. ¿Podemos sobrecargar métodos según el tipo de retorno?
Respuesta:
No podemos sobrecargar por tipo de devolución. Este comportamiento es el mismo en C++. Consulte esto para obtener más detalles.
Java
/*package whatever //do not write package name here */>
>
import>
java.io.*;>
>
public>
class>
Main {>
>
public>
int>
foo() {>
return>
10>
; }>
>
>
// compiler error: foo() is already defined>
>
public>
char>
foo() {>
return>
'a'>
; }>
>
>
public>
static>
void>
main(String args[]) {}>
}>
>>Error
./Main.java:8: error: method foo() is already defined in class Main public char foo() { return 'a'; } ^ 1 error>Sin embargo, los métodos de sobrecarga en el tipo de retorno son posibles en los casos en que el tipo de datos de la función que se llama se especifica explícitamente. Mire los ejemplos a continuación:
Java
// Java program to demonstrate the working of method>
// overloading in static methods>
>
import>
java.io.*;>
>
public>
class>
Main {>
>
>
public>
static>
int>
foo(>
int>
a) {>
return>
10>
; }>
>
public>
static>
char>
foo(>
int>
a,>
int>
b) {>
return>
'a'>
; }>
>
>
public>
static>
void>
main(String args[])>
>
{>
>
System.out.println(foo(>
1>
));>
>
System.out.println(foo(>
1>
,>
2>
));>
>
}>
}>
>>Producción10 a>Java
// Java program to demonstrate working of method>
// overloading in methods>
class>
A {>
>
public>
int>
foo(>
int>
a) {>
return>
10>
; }>
>
>
public>
char>
foo(>
int>
a,>
int>
b) {>
return>
'a'>
; }>
}>
>
public>
class>
Main {>
>
>
public>
static>
void>
main(String args[])>
>
{>
>
A a =>
new>
A();>
>
System.out.println(a.foo(>
1>
));>
>
System.out.println(a.foo(>
1>
,>
2>
));>
>
}>
}>
>>Producción10 a>
P6. ¿Cuál es la diferencia entre sobrecarga y anulación?
Respuesta:
La sobrecarga se trata de la misma función con diferentes firmas. Primordial Se trata de la misma función y la misma firma, pero diferentes clases conectadas mediante herencia.
![]()
La sobrecarga es un ejemplo de polimorfismo en tiempo de compilación y la anulación es un ejemplo de polimorfismo en tiempo de ejecución.
Artículos relacionados
- Diferentes formas de sobrecarga de métodos en Java
- Sobrecarga de métodos y error nulo en Java
- ¿Podemos sobrecargar o anular métodos estáticos en Java?