Boa noite pessoal, sou iniciante em programação Java , e logo me surgiu uma grande duvida sobre SOBRESCRITA DE METODOS, eu estou usando o meto toString em três classes que eu criei, porem o método toString da classe Pousada não esta sendo executado
Ex.
publicvoidlistaPousada(){// esse método é da classe pousadafor(inti=0;i<listaPousada.size();i++){if(listaPousada.get(i)!=null){System.out.println(listaPousada.get(i).toString());// Esse método toString é da Classe Pousado !!!!}}}
Esta retornando o toString da primeira classe AluguelQuarto, Alguém pode me ajudar por favor. Obrigado
Classe AluguelQuarto
publicclassAluguelQuarto{//Variaveis//Construtor//MetodospublicStringtoString(){Stringsaida="\n=========================================="+"\nLocatário: "+this.nomeLocatario+"\nData e horário de entrada: "+this.diaEntrada+"\nData e horário de saída: "+this.diaSaida+"\nNúmero de diárias: "+calculaDiaria()+"\nTotal devido: "+calculaValorPagamento()+"\n==========================================\n";returnsaida;}}ClasseAluguelChalepublicclassAluguelChaleextendsAluguelQuarto{//Construtor//Metodos@OverridepublicStringtoString(){Stringsaida="\n=========================================="+"\nLocatário: "+getNomeLocatario()+"\nCamas Extras: "+numeroCamasExtras+"\nData e horário de entrada: "+getDiaEntrada()+"\nData e horário de saída: "+getDiaSaida()+"\nNúmero de diárias: "+calculaDiaria()+"\nTotal devido: "+calculaValorPagamento()+"\n==========================================\n";returnsaida;}}ClassePousadapublicclassPousadaextendsAluguelQuarto{//Construtor//MetodospublicStringtoString(){Stringsaida="\nNome: "+getNomeLocatario()+"\nQuarto:"+posicaoQuarto;returnsaida;}}
Ola, informe o código na íntegra da classe Pousada, assim fica dificil de ver poruqe ela chama da outra, pois pode ser que estas extendento e chamando super…
joaoabi
Paulo, onde você esta chamando os métodos?
rmendes08
Comentários … sempre iludindo os programadores. Aposto 1 Coca-Cola que a listaPousada tem objetos da classe AluguelQuarto.
P
PauloJava2012
Amigão seque o codigo da Classe Pousada
packageprojetoaluguel;importjava.util.ArrayList;importjava.util.List;publicclassPousadaextendsAluguelQuarto{privateintposicaoQuarto;privateList<Object>listaPousada=newArrayList<>();publicPousada(){}publicvoidiniciaListaPousada(){for(inti=0;i<60;i++){listaPousada.add(i,null);}}publicvoidadicionaQuarto(Objectquarto,intposicao){this.posicaoQuarto=posicao;if(posicao<=49){listaPousada.set(posicao,quarto);System.out.println("\n====================================\n"+" QUARTO "+posicao+" ALUGADO COM SUCESSO\n"+"====================================");}elseif(posicao>=50){listaPousada.add(posicao,quarto);System.out.println("\n====================================\n"+"CHALE "+posicao+" ALUGADO COM SUCESSO\n"+"====================================\n");}}publicvoidremoveQuarto(intposicao){if(listaPousada.get(posicao)!=null){System.out.println("\n================================================="+"\nNAO PODE REMOVER ESSA POSIÇÃO ELA ESTA VAZIA\n"+"=================================================");}else{listaPousada.remove(posicao);listaPousada.add(posicao,null);}}publicvoidbuscaDados(intposicao){if(posicao==1){for(inti=0;i<listaPousada.size();i++){if(listaPousada.get(i)!=null){System.out.println(listaPousada.get(i).toString());}}}else{System.out.println("\n===================================\n"+listaPousada.get(posicao).toString()+"\n===================================");}System.out.println("\n");}publicvoidlistarQuartosDisponiveis(){System.out.println("\n");for(inti=0;i<listaPousada.size();i++){if(listaPousada.get(i)==null){if(i==21||i==40){System.out.println("\n");}System.out.print(" = "+i);}}System.out.println("\n");}publicStringtoString(){Stringsaida="\nNome: "+getNomeLocatario()+"\nQuarto:"+posicaoQuarto;returnsaida;}publicintgetPosicaoQuarto(){returnposicaoQuarto;}publicvoidsetPosicaoQuarto(intposicaoQuarto){this.posicaoQuarto=posicaoQuarto;}}
P
PauloJava2012
joaoabi. Eu estou chamando os métodos na classe main
Rodrigo_Sasaki
pra que serve esse método [i]iniciaListaPousada/i ?
e por que sua listaPousada é um List de Object?
P
PauloJava2012
Esse método iniciaListaPousada(), é para iniciar toda a lista com null, estou chamando ela no main
E a lista é do tipo Objeto para poder passar uma instancia de AluguelQuarto e um AluguelChale
me desculpe se eu tiver errado estou começando agora em poo
Rodrigo_Sasaki
Mas trabalhando com List, não existe necessidade de fazer isso.
Em todo caso, concordo com o rmendes08, altere o tipo da sua lista para Pousada e veja o que acontece.
P
PauloJava2012
Pronto passei para List listaPousada = new ArrayList<>();
Agora surgiu uma duvida, como eu passo uma instancia de AluguelQuarto e outra de AluguelChale, se minha lista é do tipo Pousada
não deveria ser Object para aceitar um quarto e um chale pois Object é mais genérico
ficou muito confuso
Rodrigo_Sasaki
a sua list deve ser de AluguelQuarto, pois é o tipo mais genérico que interessa à você.
O problema é que provavelmente existem objetos de AluguelQuarto nessa lista, por isso o toString() dele está sendo invocado
P
PauloJava2012
Assim eu acho que entendi, AluguelQuarto é mais genérico porque eu estou estendendo minhas classes a ela é isso?
rmendes08
Se você está guardando objetos do tipo AluguelQuarto na sua listaPousada então é óbvio que ao chamar listaPousada.get(i).toString() você vai invocar o método de AluguelQuarto, pois é o tipo de objeto que você recebe de listaPousada.get().
Existem 2 modificações que serão muito necessárias na minha opinião:
alterar List listaPousada para List. Dessa maneira você pode guardar tanto AluguelQuarto quanto AluguelChale na mesma lista.
trocar Pousada extends AluguelQuarto por apena Pousada. Não existe sentindo em fazer Pousada herdar de AluguelQuarto. Se você está fazendo isso para acessar atributos de AluguelQuarto, fique sabendo que isso é uma baita duma gambiarra. Elimine a herança e utilize a interface de AluguelQuarto adequadamente.
P
PauloJava2012
Elimine a herança e utilize a interface de AluguelQuarto adequadamente.
rmendes08 me desculpe, sei que você já dever ser um ótimo Programador Java, e entende muito, mais eu só estou começando.
Eliminar a herança da Classe Pousada eu entendi, mais Utilizar Interface de AluguelQuarto não!
você poderia me dar um Exemplo de utilizar interface dessa classe
rmendes08
PauloJava2012:
Elimine a herança e utilize a interface de AluguelQuarto adequadamente.
rmendes08 me desculpe, sei que você já dever ser um ótimo Programador Java, e entende muito, mais eu só estou começando.
Eliminar a herança da Classe Pousada eu entendi, mais Utilizar Interface de AluguelQuarto não!
você poderia me dar um Exemplo de utilizar interface dessa classe
Por utilizar a interface entenda utilizar exclusivamente os métodos públicos da classe.
Juliano_Pedroso_da_S
Você pode incluir chamando o super.toString();, dentro do seu método toString() da classe Pousada.