logo

Sobrecarga de método em Java

  1. Diferentes maneiras de sobrecarregar o método
  2. Ao alterar o não. de argumentos
  3. Alterando o tipo de dados
  4. Por que a sobrecarga do método não é possível alterando o tipo de retorno
  5. Podemos sobrecarregar o método principal
  6. sobrecarga de método com promoção de tipo

Se um aula tem vários métodos com o mesmo nome, mas com parâmetros diferentes, é conhecido como Sobrecarga de método .

Se tivermos que realizar apenas uma operação, ter o mesmo nome dos métodos aumenta a legibilidade do programa .

salvar de

Suponha que você tenha que realizar a adição dos números fornecidos, mas pode haver qualquer número de argumentos, se você escrever o método como a(int,int) para dois parâmetros e b(int,int,int) para três parâmetros, então ele pode ser difícil para você e para outros programadores entender o comportamento do método porque seu nome é diferente.

Portanto, realizamos a sobrecarga de métodos para descobrir o programa rapidamente.

sobrecarga de método java

Vantagem da sobrecarga de método

Sobrecarga de método aumenta a legibilidade do programa .

Diferentes maneiras de sobrecarregar o método

Existem duas maneiras de sobrecarregar o método em java

  1. Alterando o número de argumentos
  2. Alterando o tipo de dados

Em Java, a sobrecarga de método não é possível alterando apenas o tipo de retorno do método.


1) Sobrecarga de método: alterando não. de argumentos

Neste exemplo, criamos dois métodos, o primeiro método add() realiza a adição de dois números e o segundo método add realiza a adição de três números.

Neste exemplo, estamos criando métodos estáticos para que não precisemos criar instância para chamar 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)); }} 
Teste agora

Saída:

 22 33 


2) Sobrecarga de método: alteração do tipo de dados dos argumentos

Neste exemplo, criamos dois métodos que diferem em Teste agora

Saída:

 22 24.9 

P) Por que a sobrecarga de método não é possível alterando apenas o tipo de retorno do método?

Em Java, a sobrecarga do método não é possível alterando o tipo de retorno do método apenas por causa da ambiguidade. Vamos ver como a ambiguidade pode ocorrer:

 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 }} 
Teste agora

Saída:

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

System.out.println(Adder.add(11,11)); //Aqui, como o Java pode determinar qual método sum() deve ser chamado?

Nota: Erro em tempo de compilação é melhor que erro em tempo de execução. Portanto, o compilador java renderiza um erro de tempo de compilação se você declarar o mesmo método com os mesmos parâmetros.

Podemos sobrecarregar o método java main()?

Sim, por sobrecarga de método. Você pode ter qualquer número de métodos principais em uma classe por sobrecarga de método. Mas JVM chama o método main() que recebe array de strings apenas como argumentos. Vejamos o exemplo simples:

 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');} } 
Teste agora

Saída:

 main with String[] 

Sobrecarga de método e promoção de tipo

Um tipo é promovido para outro implicitamente se nenhum tipo de dados correspondente for encontrado. Vamos entender o conceito pela figura abaixo:

Sobrecarga de método Java com promoção de tipo

Conforme exibido no diagrama acima, o byte pode ser promovido para short, int, long, float ou double. O tipo de dados short pode ser promovido para int, long, float ou double. O tipo de dados char pode ser promovido para int,long,float ou double e assim por diante.

Exemplo de sobrecarga de método com 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); } } 
Teste agora
 Output:40 60 

Exemplo de sobrecarga de método com promoção de tipo se for encontrada correspondência

Se houver argumentos de tipo correspondentes no método, a promoção de tipo não será executada.

 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 } } 
Teste agora
 Output:int arg method invoked 

Exemplo de sobrecarga de método com promoção de tipo em caso de ambiguidade

Se não houver argumentos de tipo correspondentes no método e cada método promover um número semelhante de argumentos, haverá ambiguidade.

com formulário completo
 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 } } 
Teste agora
 Output:Compile Time Error 

Um tipo não é despromovido implicitamente, por exemplo, double não pode ser despromovido implicitamente para qualquer tipo.