Pessoal, estou lendo um código de um aplicativo de lista encadeada, e estou com uma dúvida na parte de inserir no início. É que o método inserirInicio() aparece duas vezes, como mostrado abaixo:
[code] public void inserirInicio(No novo){
novo.setProx(getInicio());
setInicio(novo);
}
public void inserirInicio(int valor){
No novo = new No();
novo.setValor(valor);
novo.setProx(getInicio());
setInicio(novo);
}[/code]
alguém saberia me dizer pq este método aparece duas vezes?? Comentei o primeiro e o programa não rodou…Se alguém puder me ajudar…Valew!
Esse eh um caso de reescrita de metodo, existem duas implementacoes para o metodo inserirInicio, uma com um parametro No e outra com um parametro inteiro.
Isso e permitido em Java, criar metodos com o mesmo nome e com a lista de parametros diferentes. Quando vc chamar o metodo passando um No como parametro, o programa vai rodar o primeiro metodo que so insere o No no inicio, caso passe um inteiro, ele vai chamar o segundo que cria um No e insere…
Já começou a clarear um pouco a idéia. Porém dê uma olhada no método inserirInicio():
No n;
inserirInicio(n = new No(preenche()));
Note que no parâmetro dele é passado um valor do tipo No e preenche(), que é um método que retorna um valor como mostrado abaixo:
[code]public static int preenche(){
return Integer.parseInt(JOptionPane.showInputDialog(“Valor”));
}[/code]
Isto tudo me parece um pouco confuso, seria possível simplificar o que realmente acontece quando o inserirInicio é chamado???
Obrigado mais uma vez!
A técnica de ter vários métodos com o mesmo nome e parâmetros diferentes chama-se “overload” ou sobrecarga e não deve ser confundido com reescrita ou override.
No livro do Joshua Block - Effective Java: Programming Language Guide - faz uma boa discussão de quando vale a pena realizar o overload e chama a atenção para o problema que você passou (o código pode ficar obscuro).
Já começou a clarear um pouco a idéia. Porém dê uma olhada no método inserirInicio():
No n;
inserirInicio(n = new No(preenche()));
Note que no parâmetro dele é passado um valor do tipo No e preenche(), que é um método que retorna um valor como mostrado abaixo:
[code]public static int preenche(){
return Integer.parseInt(JOptionPane.showInputDialog(“Valor”));
}[/code]
Isto tudo me parece um pouco confuso, seria possível simplificar o que realmente acontece quando o inserirInicio é chamado???
Obrigado mais uma vez! [/quote]
Amigo, fazendo o teste de mesa você irá compreender a execução.
Primeiro resolvemos a parte mais interna dos parênteses:
executamos o método preenche que é static e não precisa de uma instância para ser executado. Ele abre uma janela e espera uma leitura de um valor (ótimo forma de produzir erros na aplicação inclusive).
Ele retorna um valor primitivo do tipo int (Integer.parseInt converte o retorno de showIputDialog que é uma String para um valor inteiro).
é chamado o contrutor da classe No passando o valor inteiro.
Depois e chamado o método inserirInicio( passando um objeto No )