Duvida, Sobrescrita de método toString

15 respostas
P

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.

public void listaPousada(){ //  esse método é da classe pousada

 for (int i = 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

public class AluguelQuarto {

//Variaveis

//Construtor

//Metodos

public String toString() {

        String saida =
                "\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";

        return saida;
    }

}

Classe AluguelChale

public class AluguelChale extends AluguelQuarto {

//Construtor  
  
//Metodos

@Override
    public String toString() {

        String saida =
                "\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";

        return saida;
    }

}

Classe Pousada

public class Pousada extends AluguelQuarto {

//Construtor  
  
//Metodos

 public String toString() {

        String saida = "\nNome: " + getNomeLocatario()
                  + "\nQuarto:" + posicaoQuarto;

          return  saida;
     }

}

15 Respostas

R_chieck

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

Amigão seque o codigo da Classe Pousada

package projetoaluguel;

import java.util.ArrayList;
import java.util.List;

public class Pousada extends AluguelQuarto {

     private int posicaoQuarto;
     private List<Object> listaPousada = new ArrayList<>();

     public Pousada() {
     }

     public void iniciaListaPousada() {

          for (int i = 0; i < 60; i++) {

               listaPousada.add(i, null);

          }
     }

     public void adicionaQuarto(Object quarto, int posicao) {

          this.posicaoQuarto = posicao;

          if (posicao <= 49) {

               listaPousada.set(posicao, quarto);

               System.out.println("\n====================================\n"
                       + "  QUARTO " + posicao + " ALUGADO COM SUCESSO\n"
                       + "====================================");

          } else if (posicao >= 50) {

               listaPousada.add(posicao, quarto);

               System.out.println("\n====================================\n"
                       + "CHALE " + posicao + " ALUGADO COM SUCESSO\n"
                       + "====================================\n");

          }

     }

     public void removeQuarto(int posicao) {

          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);
          }
     }

     public void buscaDados(int posicao) {

          if (posicao == 1) {

               for (int i = 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");
     }

     public void listarQuartosDisponiveis() {

          System.out.println("\n");
          for (int i = 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");
     }

     
     public String toString() {

          
          String saida = "\nNome: " + getNomeLocatario()
                  + "\nQuarto:" + posicaoQuarto;

          return  saida;
     }

     public int getPosicaoQuarto() {
          return posicaoQuarto;
     }

     public void setPosicaoQuarto(int posicaoQuarto) {
          this.posicaoQuarto = posicaoQuarto;
     }
}
P

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

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

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

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

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.

Criado 28 de maio de 2012
Ultima resposta 29 de mai. de 2012
Respostas 15
Participantes 6