通常情况下,对于我使用的toString方法,String.format(“%s,%s”,变量,变量)并且它完全正常。
更清楚的例子,
public class example1
{
int number;
String name;
public void setup(String names, int numbers) {
name = names;
number = numbers;
}
public String toString() {
return String.format("Name: %s\n Number: %s", name, number);
}
}
这完全没问题。但是,当涉及到继承和私有变量时,我遇到了一个问题。请注意以下示例。
public class example1
{
int number;
private String name;
public void setName(String names) {
name = names;
}
public String getName() {
return name;
}
}
public class example2 extends example1
{
public void setUP(int z) {
number = z;
}
public String toString() {
return String.format("Name: %s\n Number: %s", getName(), number);
}
}
使用toString方法时,数字打印正常,但我只获得名称的null。我尝试使用方法名称,但这不会工作,我尝试使用n,但这不会工作。我只想澄清一下如何做到这一点,因为知道它会非常有帮助。
所以,这是我的主要方法
public class example3
{
public static void main(String[] args) {
example1 one = new example1();
one.setName("Uri");
example2 two = new example2();
two.setUP(500);
System.out.println(one.getName());
System.out.println(two.toString());
}
}
toString方法中的数字打印得很好,只是名称为空。
明显的解决方案
public class example3
{
public static void main(String[] args) {
example1 one = new example1("Uri");
test2 two = new test2(one.getName());
two.setUP(500);
System.out.println(one.getName());
System.out.println(two.toString());
}
}
这很好用,但我不确定这有多优雅。
答案 0 :(得分:3)
这与toString()
无关。您还没有初始化对象的name
成员,这就是为什么它被打印为null。
我在代码中看不到任何构造函数,因此您应该使用setName()
方法初始化名称。
example2 ex = new example2();
ex.setUp(5);
ex.setName("John");
System.out.println(ex);
编辑:
在您发布的main
中,您创建了两个对象,并仅在其中一个对象中设置名称。在另一方面,同样保持无效。 two.toString()
不会打印名称,因为您只在one
对象中设置了名称。
答案 1 :(得分:1)
只需添加一个构造函数:
public class example1
{
private String name;
int number;
public example1(String names) {
name = names;
}
public void setName(String names) {
name = names;
}
public String getName() {
return name;
}
}
public class example2 extends example1
{
public example2(String names) {
super(names);
}
public void setUP(int z) {
number = z;
}
public String toString() {
return String.format("Name: %s\n Number: %s", getName(), number);
}
}
Doeing,它调用初始化example1
变量的name
构造函数。现在,当调用getName()
时,它返回通过构造函数传递的字符串。
现在,在main()
:
public static void main (String [] args) {
example1 one = new example1("Uri");// a name is required
example2 two = new example2("Uri");// a name is required
two.setUP(500);
System.out.println(one.getName());
System.out.println(two.toString());
}