Sobrecarga e Sobreposição
Sobrecarga (Overload)
Sobrecarga de métodos é a capacidade de definir vários métodos com o mesmo nome em uma mesma classe, mas com diferentes parâmetros. Isso permite que a mesma operação seja realizada com diferentes tipos de dados, sem a necessidade de criar vários métodos com nomes diferentes.
Para sobrecarregar um método, é necessário que a assinatura do método seja diferente. A assinatura do método inclui o nome do método e a lista de parâmetros, incluindo o tipo de cada um e sua ordem.
Exemplo de sobrecarga de métodos:
public class Matematica {
public int somar(int x, int y) {
return x + y;
}
public float somar(float x, float y) {
return x + y;
}
public int somar(int x, int y, int z) {
return x + y + z;
}
}
Nesse exemplo, a classe Matematica
possui três métodos com o mesmo nome somar
, mas com diferentes parâmetros. O primeiro método soma dois inteiros, o segundo soma dois floats e o terceiro soma três inteiros.
A seleção do método adequado é feita pelo compilador em tempo de compilação, com base no número e tipo de parâmetros fornecidos. Quando um método é chamado com um conjunto de parâmetros que corresponde à sua assinatura, esse método será executado.
A sobrecarga de métodos é útil para simplificar o código e torná-lo mais legível, além de permitir que uma classe possa oferecer diferentes versões de uma mesma operação para tipos de dados diferentes.
É importante lembrar que métodos sobrecarregados não podem ter apenas tipos de retorno diferentes, pois o compilador não pode distingui-los apenas pelo tipo de retorno.
Sobreposição (Override)
A sobreposição de métodos é uma técnica usada para modificar o comportamento de um método em uma classe filha que foi herdado da classe pai. Essa técnica está intimamente relacionada com o polimorfismo, que é a capacidade de objetos de classes diferentes responderem ao mesmo método de maneiras diferentes.
Quando uma classe filha sobrepõe um método da classe pai, ela redefine a implementação desse método para fornecer um comportamento específico à classe filha. Isso permite que a classe filha substitua o comportamento padrão da classe pai e forneça sua própria implementação para o método. Quando um objeto da classe filha é criado, ele responderá ao método sobrescrito de acordo com a implementação da classe filha, em vez da implementação da classe pai.
Para sobrepor um método, é necessário definir um método com a mesma assinatura na classe filha. A assinatura do método inclui o nome do método, o tipo e a ordem dos parâmetros e o tipo de retorno. O modificador de acesso (public
, private
, protected
) pode ser alterado, mas a visibilidade do método na classe filha não pode ser menor do que a visibilidade na classe pai, ou seja, se o método da classe pai for protected
, o método da classe filha pode ser alterado para public
, mas não pode ser alterado para private
.
Veja um exemplo de sobreposição de método:
public class Animal {
public void emitirSom() {
System.out.println("O animal emitiu um som.");
}
}
public class Cachorro extends Animal {
@Override
public void emitirSom() {
System.out.println("O cachorro latiu.");
}
}
public class Gato extends Animal {
@Override
public void emitirSom() {
System.out.println("O gato miou.");
}
}
public class Main {
public static void main(String[] args) {
Animal animal1 = new Cachorro();
Animal animal2 = new Gato();
animal1.emitirSom(); // imprime "O cachorro latiu."
animal2.emitirSom(); // imprime "O gato miou."
}
}
Neste exemplo, a classe Animal
define um método emitirSom()
que é sobrescrito na classe Cachorro
e na classe Gato
. Quando o método emitirSom()
é chamado em um objeto da classe Cachorro
, ele executa a implementação da classe Cachorro
, e quando é chamado em um objeto da classe Gato
, ele executa a implementação da classe Gato
. Isso é possível porque a chamada do método é resolvida em tempo de execução, com base no tipo real do objeto em questão, que é determinado durante a execução do programa.
Referências
Last updated