dog1.setName("rex")
未将值"rex"
分配给name
,而是返回null
为什么会这样?
public class Program3a {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
name = "unassigned";
}
}
public class Program3aTest extends Program3a{
public static void main(String[]args) {
Program3aTest dog1 = new Program3aTest();
dog1.setName("rex");
System.out.println(dog1.getName());
}
}
在类Program3a中设置名称时出错。应该有this.name = name而不是name =“ unssigned”。因此,请替换此语句。因为name的初始值为默认构造函数设置的null。您必须将其分配给参数名称,该名称是Program3aTest类的输入。这是显示“ rex”的代码。
public class Program3a {
private String name;
/* public Program3a(String name) {
setName(name);
}*/
public String getName() {
return name;
}
public void setName(String name) {
this.name = name; // change this statement in your code
}
}
public class Program3aTest extends Program3a{
public static void main(String[]args) {
Program3aTest dog1 = new Program3aTest();
dog1.setName("rex");
System.out.println(dog1.getName());
}
}
像这样更改Program3a
类:
public class Program3a {
private String name = "unassigned";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
简而言之,您的“ getter”返回的是您赋予它的变量值-> string(type)变量名=“ unssigned”。您将始终告诉它将名为“ name”的变量设置为未分配的字符串。试试这个
public void setName(String name) {
this.name = name;
}
此外,您还希望创建一个构造函数并使之整体上更高效(构造函数可以摆脱设置方法,而不能摆脱设定方法)。完整:
public class Main {
public static void main(String[] args){
Program3a testClass = new Program3a();
testClass.setName("Rex");
System.out.println(testClass.getName());
}
}
public class Program3a {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
或外观更好的构造函数
public Program3a(String name) {
this.name = name;
}
这当然需要您更新测试人员的课程(我使用main)。
Program3a testClass = new Program3a("Rex");
System.out.println(testClass.getName());
构造函数会自动创建为幻影。被覆盖可以吸收变量的参数并减少不必要的编码。创建该类后,您可以使用行Program3a testClass = new Program3a("Rex");
创建一个新类。 Rex现在自动填充变量Named,并在调用testClass.getName()
之前继续使用此值,直到更改为止。