Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Sobrescrita e Sobrecarga de métodos qual a diferença e para o que servem ?

Sou iniciante no curso de Java e estou com uma duvida em relação a saber diferenciar um método sobrescrito de um método sobrecarregado, ou até mesmo saber qual versão do método será executada ?

Obs: Se puderem exemplificar com códigos ficarei bastante grato!!!

4 respostas

A sobrescrita de métodos seria criar um novo método na classe filha contendo a mesma assinatura e mesmo tipo de retorno do método sobrescrito. (Override). Ja o sobrecarga, ele no caso seria, o que permite métodos de mesmo nome, mas com suas assinaturas diferentes, ex argumentos diferentes.

Quando é indicado usar um ou outro? Obs: No caso um exemplo se possível!!!

solução!

Pedro,

Para complementar as outras respostas. A sobrescrita de métodos é quando estamos trabalhando com orientação a objetos e temos uma classe (filha) que acaba herdando de uma outra classe(mãe). Caso a classe filha precise modificar algum comportamento herdado da classe mãe, podemos fazer uma sobrescrita do método diretamente da classe filha. Exemplo:

public class Funcionario {

    protected String nome;
    protected String cpf;
    protected double salario;

    public double calculaBonus() {
        return salario * 0.10;
    }
}
public class Gerente extends Funcionario {

    String setor;

    @Override
    public double calculaBonus() {
        return this.salario * 0.20;
    }
}

Nesse exemplo temos a classe Funcionario onde tem suas características e um método para calcular o bônus, onde é o salário + 10%, mas temos que representar um Gerente, que possui as mesmas características de um funcionário, mas pode existir diferenças em alguns comportamentos. Nesse exemplo, a classe Gerente vai herdar todos os atributos e métodos da Funcionario e também terá uma característica a mais, que é o setor, mas o cálculo do bonus de Gerente é diferente, pois não é apenas 10%, são 20%. Dessa forma, conseguimos fazer a sobrescrita do método calculaBonus() herdado de Funcionário e modificar seu comportamento.

Sobre a sua dúvida de qual versão do método será executado, caso eu instancie um objeto do tipo Gerente e chame o método calculaBonus(), será executado o método da classe Gerente e não da funcionário, pois eu realizei a sobrescrita desse método. Exemplo:

Gerente gerente = new Gerente();
gerente.salario = 1000;
System.out.println(gerente.calculaBonus());

Irá retornar 200, pois foi executado o calculaBonus() da classe Gerente. Lembrando que quando realizamos a sobrescrita do método, deve ser a mesma assinatura do método original, ou seja, mesmo tipo de retorno, nome, quantidade de parâmetros e etc.

A sobrecarga de métodos é quando temos vários métodos com o mesmo nome, mas com retornos e parâmetros diferentes. Exemplo:

public class Calculadora {

    public int soma(int num1, int num2) {
        return num1 + num2;
    }

    public double soma(double num1, double num2) {
        return num1 + num2;
    }
}

Dessa forma, evitamos ficar poluindo o nosso código com nomes de métodos desnecessários, como double somaDouble(double num1, double num2), int somaInt(int num1, int num2) e só variamos os parâmetros que recebemos e o retorno, mas continuamos a utilizar o mesmo nome.

Espero ter ajudado. Bons estudos.

Ajudou sim, Obrigado!!!