如何在这种情况下正确使用 Getter

How to Correctly use Getter on this Situation

我整天都在寻找解决方案,但首先,我想说我对 java 和面向对象完全陌生,所以请放轻松

然后,这是我到目前为止编写的一些代码

主要Class

package br.edu.fatecmm.study;

public class Main {

    public static void main(String[] args) {

        Pessoa ppl = new Pessoa();
        Conta gamer = new Conta();

        gamer.setLogin("kouhei");
        gamer.setPassword("mypass");

        ppl.setNome("Qualquer");
        ppl.setSobrenome("Nome");
        ppl.setJogador(gamer);

        ppl.imprimePessoa();
        gamer.imprimeConta();

    }
}

佩索阿Class

package br.edu.fatecmm.study;

public class Pessoa {
    private String nome, sobrenome;
    private Conta jogador;

    public void imprimePessoa(){
        System.out.println("nome = " + nome);
        System.out.println("sobrenome = " + sobrenome);
        System.out.println("jogador = " + jogador.toString());
        System.out.println(" ");
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getSobrenome() {
        return sobrenome;
    }

    public void setSobrenome(String sobrenome) {
        this.sobrenome = sobrenome;
    }

    public Conta getJogador() {
        return jogador;
    }

    public void setJogador(Conta jogador) {
        this.jogador = jogador;
    }
}

联系Class

package br.edu.fatecmm.study;

public class Conta {
    private String login, password;

    public void imprimeConta(){
        System.out.println("login = " + login);
        System.out.println("password = " + password);
        System.out.println(" ");
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

所以,当我 运行 上面描述的代码是这样的时候会发生什么:

"C:\Program Files\Java\jdk-11.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.3.4\lib\idea_rt.jar=49901:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.3.4\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\Kouhei\IdeaProjects\Study\out\production\Study br.edu.fatecmm.study.Main
nome = Qualquer
sobrenome = Nome
jogador = br.edu.fatecmm.study.Conta@3498ed
 
login = kouhei
password = mypass
 

Process finished with exit code 0

基本上我想做的是,当我打电话 ppl.imprimePessoa();

应该是return nome + sobrenome,分别是"Qualquer"和"Nome",然后是return jogador,应该是"kouhei"和"mypass",但是,我得到的不是 kouhei 和 mypass return,而是 "br.edu.fatecmm.study.Conta@3498ed"

我相信 3498ed 指向一个内存位置,但我不确定,也许我在说一些完全愚蠢的事情,但我什至不知道要寻找什么来研究这个

我尝试阅读有关 Getter 和二传手的内容,但没有任何帮助

我也希望调用时不仅能检索到"kouhei/mypass" ppl.imprimePessoa();

但我也希望能够仅检索 "kouhei" 例如

我试过了

ppl.setJogador(gamer.getLogin());

但是没用

几个小时以来我一直在尝试很多不同的方法,也看到了一些关于实例的东西,但是无法让它工作

提前致谢

当您调用默认 toString() 时,返回的是对象的字符串表示形式。

如 java 文档中所述:https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html

如果你想使用toString,你应该在classConta中覆盖它,像这样:

@Override
public String toString(){
    return "login = " + login + "password = " + password;
}

如果您不习惯覆盖默认方法(尽管这样做没问题,真的),另一种可能性是创建一个新方法 returns class 中的字符串 Conta。喜欢:

public String jogadorString(){
    return "login = " + login + "password = " + password;
}

并在 class Pessoa 中使用它作为 jogador.jogadorString() 而不是 jogador.toString().