Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Tentando entender

Eu entendi o que professor disse, minha dúvida não está bem dentro do que ele explicou, talvez um pouco além, se ao invés de colocar: "System.out.println(primeiraConta.saldo);" eu colocar: "System.out.println(primeiraConta);", vai ter a saída: "Conta@6ff3c5b5", por que isso acontece?

public class CriarConta {

public static void main(String[] args) {
    Conta primeiraConta = new Conta();
    primeiraConta.saldo = 200;
    System.out.println(primeiraConta);
}

}

2 respostas

Boa tarde Tiago! Quando você digita "Conta primeiraConta = new Conta();" -> significa que está instanciando uma classe do tipo Conta, toda instanciação cria automaticamente um nome para o objeto que no caso seria "Conta@6ff3c5b5", portanto quando você digita "System.out.println(primeiraConta);" ele vai printar na tela o nome do objeto criado, porque você não está pedindo para acessar nenhum atributo daquela instância ou objeto, porém quando você digita "System.out.println(primeiraConta.saldo);", está printando na tela um atributo daquele objeto, que no caso é o saldo. :)

solução!

Olá Tiago, tudo certo?

Entendi a sua dúvida e ela é bem recorrente para quem esta começando com orientacao a objetos.

Isso acontece porque em Java o métodotoString() é chamado quando voce tenta imprimir algum objeto. O que esse método por padrao faz é retornar uma representacao de string do objeto.

Utilizando o seu exemplo de saída, Conta é o nome do objeto, @ faz a união da string e 6ff3c5b5 é o codigo hash do objeto.

Essa saída feia esta saindo dessa forma porque a Conta é um objeto que voce mesmo criou e nao implementou o método toString() para dizer ao Java o que retornar quando alguem tentar imprimir esse objeto. Caso voce queira mudar esse comportamento padrao voce pode sobrescrever este método dizendo o que voce quer que seja mostrado. Ex.:

@Override
public String toString() {
        return "Testando meu proprio toString";
}

Caso esteja se perguntando também, os objetos padroes do Java ja possuem essa implementacao pronta, cada um com a sua particularidade.

E se tiver com duvida em relacao ao @Override e o conceito de sobrescrita, não se preocupe, esses termos serao abordados mais a frente na orientacao a objetos.

Links que podem lhe ajudar a entender melhor o assunto:

https://www.ti-enxame.com/pt/java/como-faco-para-imprimir-este-objeto-java-sem-obter-sometype-2f92e0f4/1052796090/

https://www.guj.com.br/t/como-usar-o-tostring-e-para-que-serve-como-e-chamado-resolvido/56031/3

Documentacao do Java sobre o toString(): https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#toString()

Qualquer duvida estou a disposicao. Abracos