Sobrecarga e sobrescrita, estou com duvida maior na sobrecarga , nao consegui entender.
Sobrecarga e sobrescrita, estou com duvida maior na sobrecarga , nao consegui entender.
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.