- Diferentes formas de sobrecargar el método.
- Al cambiar el no. de argumentos
- Cambiando el tipo de datos
- Por qué no es posible la sobrecarga de métodos cambiando el tipo de retorno
- ¿Podemos sobrecargar el método principal?
- 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.
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.
- Cambiando el número de argumentos
- 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:
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