Introdução à sobrecarga e substituição em Java

Vamos primeiro olhar para o que o nome sugere à primeira vista. “Sobrecarregar” significa: sobrecarregar a funcionalidade original de alguém, certo? Visto que “Substituir” significa: fornecer nova funcionalidade além da funcionalidade original de qualquer pessoa. Neste artigo, veremos a sobrecarga e substituição em Java em detalhes. Sim, também em Java, eles são implementados da mesma maneira programaticamente. Vamos dar uma olhada nisso um por um.

Sobrecarga em Java

Quando uma classe java possui vários métodos com o mesmo nome, mas com argumentos diferentes, chamamos de Sobrecarga de método. Mantendo o mesmo nome, estamos apenas aumentando a legibilidade do código do programa. Por exemplo, suponha que precisamos executar alguma operação de adição em alguns números. Digamos que o nome do nosso método seja "adição ()". Aqui, a adição pode ser feita entre dois números, três números ou mais. Portanto, dependendo de quantos números envolverão na operação adicional, podemos alterar os argumentos (ou parâmetros) da função. Mas, em vez disso, se você escrever métodos diferentes para o número diferente de argumentos, será difícil reconhecer como o nome seria diferente. Portanto, sobrecarregando, estamos obtendo melhor legibilidade do nosso código. Então agora a questão é como vamos conseguir sobrecarga?

Vejamos esses por um com códigos de exemplo.

Método # 1 - Modificando o número de parâmetros

Então, aqui, faremos operações adicionais em alguns números. Para isso, vamos criar uma classe chamada "AdditionOperation". Dentro dessa classe, vamos ter dois métodos chamados "adição ()". Em um desses métodos, realizaremos uma adição de dois números. No outro, realizaremos a adição de três números. Isso será alcançado simplesmente alterando o número de parâmetros nesses métodos, mas manteremos o nome igual. Dessa maneira, estamos sobrecarregando o método “adição ()” aqui.

Código:

public class AdditionOperation (
static int addition(int num1, int num2)(return num1+num2;) //function declarationand definition for addition of two numbers
static int addition(int num1, int num2, int num3)(return num1+num2+num3;) //function declarationand definition for addition of three numbers
public static void main(String args()) (
system.out.printin(addition(35, 36)); //method overloading
system.out.printin(addition(35, 36, 37)); //method overloading, we are calling same methods but for different number of arguments.
)
)

Resultado:

Método 2 - Modificando o tipo de dados

Então, aqui, faremos operações de adição em diferentes tipos, por exemplo, entre o tipo inteiro e entre o tipo duplo. Para isso, vamos criar uma classe chamada "AdditionOperation". Dentro dessa classe, vamos ter dois métodos chamados "adição ()". Em um desses métodos, realizaremos a adição de dois números inteiros. No outro, realizaremos a adição de dois duplos. Isso será alcançado simplesmente alterando o tipo de parâmetros nesses métodos, mas manteremos o nome igual. Dessa maneira, estamos sobrecarregando o método “adição ()” aqui.

Código:

public class additionOperation (
static int addition(int num1, int num2)(return num1+num2;) //function declarationand definition for addition of two numbers
static double addition(double num1, num2)(return num1+num2;) //function declarationand definition for addition of three numbers
public static void main(String args()) (
system.out.printin(addition(35, 36)); //method overloading
system.out.printin(addition(35.5, 36.6)); //method overloading, we are calling same methods but for different type of arguments.
)
)

Resultado:

Pontos a serem observados por sobrecarga

  • Sobrecarregar em java é basicamente um "sobrecarga polymMethod em tempo de compilação em orphism C #". O polimorfismo em tempo de compilação em java também é chamado como "Static method Dispatch" ou "Early binding". Então, o que quero dizer com esse jargão?
  • O polimorfismo, como o nome sugere, é basicamente uma capacidade de assumir várias formas (poly: many, morph: form). Então, aqui, vincular ou vincular a função sobrecarregada e o objeto é feito em tempo de compilação. Por isso, é chamado polimorfismo em tempo de compilação.
  • Basicamente aqui, a ligação da função ao objeto é feita antes do tempo de execução (ou seja, durante o tempo de compilação), portanto, também é chamada de "Ligação antecipada".
  • O envio estático é um tipo de polimorfismo ou envio de método que informa como o java selecionará qual funcionalidade do método será usada em tempo de compilação. (Quero dizer, se ele irá adicionar dois ou três números no nosso exemplo de codificação). Portanto, o nome também é conhecido como o método estático Dispatch.

Substituindo em Java

  • Quando uma subclasse java ou classe filho tem um método com o mesmo nome e contém os mesmos parâmetros ou argumentos e tipo de retorno semelhante ao método presente em sua superclasse ou classe pai, podemos chamar o método da classe filho como um método substituído do método de sua classe pai.
  • Por exemplo, suponha que precisamos executar alguma operação de exibição de acordo com o tipo de classe. Quero dizer, se eu chamar o método de uma classe pai, ele exibirá uma mensagem definida em uma classe pai. Porém, quando chamamos o método da classe filho, ele substitui a mensagem de exibição da classe pai e mostra a mensagem de exibição que é definida dentro do método da classe filho. Portanto, dependendo da exibição que precisamos mostrar, podemos chamar a classe relacionada (pai ou filho). Aqui não estamos alterando o nome do método, argumento e tipo de retorno. Estamos apenas mudando a funcionalidade do método na classe filho. Mas, em vez disso, se não fizermos a substituição, ou seja, não fornecermos a implementação específica do método filho, ao chamar o método, ele exibirá a mesma mensagem presente na classe pai.
  • Ao escrever o código, usaremos a anotação @ Override antes do método a ser substituído. A anotação @Override informa ao compilador que o método deve substituir um método que foi declarado em uma superclasse. Embora não seja obrigatório usar isso, ajuda a evitar erros. Se um método anotado com @Override falhar em substituir um método, o compilador gerará um erro.

Regras para Substituição de Método Java

  1. O método deve ter o mesmo nome da classe pai
  2. O método deve ter o mesmo parâmetro da classe pai.
  3. Deve haver um relacionamento IS-A (herança).

Código:

//Parent or Super class
class Parent (
public void display() (
system.out.printin("Hello, I am from parent class");
)
)
//Child or sub class
class Sub extends Parent (
//Below method overrides the Parent display() method
// @override
public void display() (
system.out.printin("Hello, I am from child class");
)
)
//Driver class
public class Overriding (
public static void main?(String args())
(
Parent superObject = new Parent ();
superObject.display(); // Super class method is called
Parent subObject = new Sub();
subObject.display(); //Child class method is called by a parent type reference: this is functionality of method overriding
Sub subObject2 = new Sub(); //Child class method is called by a child type reference
subObject2.display();
)
)

Resultado:

Limitações no método Substituindo:

  1. Métodos particulares da classe pai não podem ser substituídos.
  2. Métodos finais não podem ser substituídos
  3. Métodos estáticos não podem ser substituídos

Pontos a serem notados por substituir

  • Sobrecarregar em java é basicamente um "polimorfismo em tempo de execução". O polimorfismo de tempo de execução em java também é chamado como "Dynamic method Dispatch" ou "Late binding". Então, o que se entende por esse jargão?
  • O polimorfismo, como o nome sugere, é basicamente uma capacidade de assumir várias formas (poly: many, morph: form). Portanto, aqui a chamada para uma função sobrecarregada com o objeto é feita no tempo de execução. Daí o chamado polimorfismo em tempo de execução.
  • Basicamente aqui, a ligação da função ao objeto é feita tardiamente, após a compilação (ou seja, durante o tempo de execução); portanto, também é chamado de "ligação tardia".
  • O despacho dinâmico é um tipo de polimorfismo ou despacho de método que informa como o java selecionará qual funcionalidade do método será usada no tempo de execução. Portanto, o nome também é conhecido como método dinâmico Dispatch.

Conclusão

Isso conclui nosso aprendizado do tópico “Sobrecarregando e substituindo em Java”. Escreva os códigos mencionados nos exemplos acima no compilador java e verifique a saída. O aprendizado dos códigos será incompleto se você não trabalhar sozinho, pois isso aprimorará suas habilidades de codificação. Feliz codificação !!

Artigos recomendados

Este é um guia para a Sobrecarga e Substituição em Java. Aqui discutimos métodos em Sobrecarga, juntamente com regras e limitações de Substituição em Java. Você também pode consultar nossos outros artigos sugeridos para saber mais -

  1. Substituindo em JavaScript
  2. Substituindo em OOPs
  3. O que são genéricos em Java?
  4. Substituindo em PHP
  5. Sobrecarga de Python
  6. Herança em PHP
  7. Guia completo de herança em Python
  8. Sobrecarregando e substituindo em c #
  9. Tipos e manipulação de erros em JavaScript
  10. Exemplos e como os genéricos funcionam em c #
  11. Função e Regras de Substituição em Python