我一整天都在寻找解决方案,但首先,我想说我对 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();
}
}
佩索阿级
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;
}
}
康塔级
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();
它应该返回nome + sobrenome,分别是“Qualquer”和“Nome”,然后返回jogador,它应该是“kouhei”和“mypass”,但是,我得到的是“br.edu.fatecmm.study.Conta@3498ed”,而不是kouhei和mypass返回
我相信 3498ed 指向一个内存位置,但我不确定,也许我说的是完全愚蠢的事情,但我什至不知道要寻找什么来研究这个
我尝试阅读有关 Getter 和 Setters 的内容,但没有任何帮助
我还希望在调用时不仅能够检索“kouhei/mypass” ppl.imprimePessoa();
但我也希望能够仅检索“kouhei”,例如
我试过了
ppl.setJogador(gamer.getLogin());
但是不起作用
我已经尝试了很多不同的方法几个小时,也看到了一些关于实例的东西,但无法使其工作
提前致谢
最佳答案
当您调用默认的toString()
时,返回的是对象的字符串表示形式。
如java文档中所述:https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html
如果你想使用toString
,你应该在Conta
类中重写它,如下所示:
@Override
public String toString(){
return "login = " + login + "password = " + password;
}
如果您觉得重写默认方法不舒服(实际上这样做没有问题),另一种可能性是创建一个在类 Conta
中返回 String 的新方法。喜欢:
public String jogadorString(){
return "login = " + login + "password = " + password;
}
并在Pessoa
类中将其用作jogador.jogadorString()
而不是jogador.toString()
。
关于java - 这种情况如何正确使用Getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55681339/