4
respostas

Duvidas sobre sobrecarga

Sobrecarga e sobrescrita, estou com duvida maior na sobrecarga , nao consegui entender.

4 respostas

Oie Estevão, tudo bem contigo?

Sobrecarga é quando temos dois métodos com o mesmo nome na mesma classe, vemos muito o uso da sobrecarga com os construtores, veja abaixo:

public class Conta {

        private int agencia;

        public Conta(){

        }

        public Conta(int agencia){
                this.agencia = agencia;
        }
}

Como é possível ver acima, foram criados dois construtores, porém um é o padrão e o outro recebe um parâmetro e faz uma lógica.

Já a sobrescrita é quando reescrevemos a lógica de um método herdado da classe mãe na classe filha, segue exemplo:

Classe Conta:

public class Conta{

        public void print(){
                System.out.println("Essa é uma conta!");
        }
}

Classe ContaCorrente:

public class ContaCorrente extends Conta{

        @override
        public void print(){    // como podemos observar, esse é o método que essa classe ContaCorrente herda de Conta
                System.out.println("Essa é uma conta corrente!");    // foi feito uma alteração dentro do Sysout
        }
}

Existe um artigo bem legal sobre esse tema, nele esses temas são aprofundados, clique aqui para ver.

Espero ter ajudado!

Se tiver qualquer outra dúvida estarei por aqui :)

E necessario usar a palavra @override e outra duvida qual é a verdadeira função da sobrecarga ?

Oie Estevão!

Não é necessário usar o @override, mas é interessante para indicar que aquilo é um método sobrescrito para outros programadores que podem acabar usando o seu código.

Quanto a função da sobrecarga a resposta é depende, na maioria das vezes usamos a sobrecarga quando precisamos, por exemplo, que o mesmo método tenha lógicas diferentes para atingir o mesmo objetivo, sem uma lógica substituir a outra, veja o exemplo abaixo:

public void falar(){    // em alguns casos será apenas necessário chamar esse método, quando não queremos fazer nenhuma validação
        System.out.println("Sim, eu posso falar!");
}


public void falar(boolean estaSemVoz){       // em algumas situações será necessário fazer uma validação, mas ainda sim o objetivo do método ainda é o mesmo, por isso é preferível usar a sobrecarga para não ter que criar um método com nome diferente
        if(estaSemVoz == true){
                System.out.println("Não posso falar, estou sem voz");
        } else if (estaSemVoz == false){
                System.out.println("Sim, eu posso falar!");
        }
}

Conseguiu entender um pouco melhor agora?

Muito obrigado pela explicação , vocês estao me ajudando muito.