- Diferentes maneiras de sobrecarregar o método
- Ao alterar o não. de argumentos
- Alterando o tipo de dados
- Por que a sobrecarga do método não é possível alterando o tipo de retorno
- Podemos sobrecarregar o método principal
- 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.
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
- Alterando o número de argumentos
- 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:
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