Как правильно использовать Getter в этой ситуации

#java #intellij-idea #getter-setter

#java #intellij-идея #getter-сеттер

Вопрос:

я весь день искал решение этой проблемы, но, прежде всего, я хочу сказать, что я совершенно новичок в Java и объектной ориентации, поэтому, пожалуйста, полегче со мной

Затем, вот некоторый код, который я сделал до сих пор

Основной класс

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

    }
}  

Класс Pessoa

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

Класс Conta

 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 FilesJavajdk-11.0.2binjava.exe" "-javaagent:C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2018.3.4libidea_rt.jar=49901:C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2018.3.4bin" -Dfile.encoding=UTF-8 -classpath C:UsersKouheiIdeaProjectsStudyoutproductionStudy 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();

Он должен вернуть nome sobrenome, который является соответственно «Qualquer» и «Nome», а затем вернуть jogador, который ДОЛЖЕН быть «kouhei» и «mypass», однако вместо возврата kouhei и mypass я получаю «br.edu.fatecmm.study.Продолжение @3498ed»

Я считаю, что 3498ed указывает на позицию в памяти, но я не уверен, может быть, я говорю что-то совершенно глупое, но я даже не знаю, что искать, чтобы изучить это

Я пытался читать о геттере и сеттерах, но ничего не помогает

Я также хочу иметь возможность извлекать не только «kouhei / mypass» при вызове ppl.imprimePessoa();

Но я также хотел бы иметь возможность извлекать только «kouhei», например

Я попробовал это

 ppl.setJogador(gamer.getLogin());  

но это не работает

Я часами пробовал множество разных методов, а также видел кое-что об экземплярах, однако не смог заставить его работать

Заранее спасибо

Комментарии:

1. Метод «toString» наследуется от Object, его следует переопределить, если вы хотите изменить его вывод. Кстати, мышление на Java — хорошая книга.

2. Как сказал @Alex, jogador имеет тип Conta и должен переопределить метод toString, чтобы обеспечить некоторый полезный, удобочитаемый вывод. Другие переменные nome и sobrenome имеют только тип String и поэтому выводят строковый литерал, который вы инициализировали или установили.

3. toString — это то, что я пробовал «вслепую», потому что я так устал пробовать, и НИЧЕГО не работает, я только что обнаружил, что я получаю саму ячейку памяти, однако даже не Arrays.toString(jogador) работает, я не знаю, что еще делать, мне нужны ТОЛЬКО сами данные,не место в памяти, чтобы закончить эту домашнюю работу :

Ответ №1:

Когда вы вызываете значение по умолчанию toString() , возвращается строковое представление объекта.

Как объясняется в java docs: https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html

Если вы хотите использовать toString , вы должны переопределить его в классе Conta , например:

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

Другая возможность, если вам неудобно переопределять метод по умолчанию (хотя, на самом деле, это не проблема), — создать новый метод, который возвращает строку в классе Conta . Нравится:

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

и используйте его в классе Pessoa как jogador.jogadorString() вместо jogador.toString() .

Комментарии:

1. после ответа мистера Муса я пошел в правильном направлении, но меня все еще смущала проблема переопределения, однако ты все разъяснил, большое, большое спасибо, чувак