#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. после ответа мистера Муса я пошел в правильном направлении, но меня все еще смущала проблема переопределения, однако ты все разъяснил, большое, большое спасибо, чувак