我创建了一个新的“讲师”类,该类扩展了另一个“人”类,我想为讲师创建2个构造函数,一个构造函数将接受名称和津贴(只是一个常数,表示工资是多少),另一个只接受名称并使用代码中设置的默认津贴。我包括适当的吸气剂和吸气剂。然后,我写了一个writeOutput方法来打印类似于此的输出
名称:(名称)获取名称并打印 津贴:(津贴)相同的过程^
这是我到目前为止所拥有的
Lecturer.java
public class Lecturer extends Person{
private static String name;
static double stipend;
public Lecturer(String name) {
super(name);
}
public Lecturer(String name, double stipend) {
super(name);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getStipend() {
return stipend;
}
public void setStipend(double stipend) {
this.stipend = stipend;
}
public static void writeOutput() {
System.out.println("Name: " + name);
System.out.println("Stipend: " + stipend);
}
}
Person.java
public class Person {
/** Every Person has a name */
private String name;
/** Person requires a name */
public Person(String n) {
this.name = n;
}
/** return this Person's name */
public String getName() {
return this.name;
}
/** Change this Person's name */
public void setName(String nn) {
this.name = nn;
}
主文件(Inheritance.java)
第41-53行
Lecturer l1 = new Lecturer("Zachary");
Lecturer l2 = new Lecturer("Wilhelmina", 11017.00);
l1.writeOutput();
l2.writeOutput();
pause();
l1.setName("Zack");
l1.setStipend(10800.00);
l1.writeOutput();
pause();
System.out.printf("%s's stipend is $%,4.2f.\n",
l1.getName(), l1.getStipend());
System.out.printf("%s's stipend is $%,4.2f.\n",
l2.getName(), l2.getStipend());
这是输出
Name: null
Stipend: 0.0
Name: null
Stipend: 0.0
press enter...
Name: Zack
Stipend: 10800.0
第二部分可以正常工作,但是第一部分不是,我试图更改代码,但是没有任何正常工作。
答案 0 :(得分:2)
在Lecturer
中,您要声明另一个name
变量。此变量与name
中声明的Person
变量分开。对超类构造函数的调用是在name
中而不是Person
中设置Lecturer
变量。但是您不需要第二个变量。去掉它。您可以通过已经声明的Person
方法访问getName
中的名称。这意味着您也不需要在getName
中重新声明setName
和Lecturer
,因此Lecturer
类可以继承它们。
此外,在Lecturer
中,您声明的两个变量不应为static
。根据上述推理,name
甚至不应该存在,但即使应该存在,也不应存在static
。变量stipend
应该存在,但不应为static
。声明成员变量static
时,整个类只有一个变量,无论您创建了多少实例,这听起来都不是您想要的。
您的构造函数应初始化stipend
。
答案 1 :(得分:1)
您在Lecturer中有一个静态变量,该静态变量的名称与从Person继承的名称相同,而您的getter引用的是该静态变量-您确定要这些静态变量吗?为了完整起见,如果您真的想保持静态名称和继承名称相同,则将您的吸气剂更改为return this.name;
,这将返回继承的名称实例变量。...但是该方法可以从Person继承。课...
答案 2 :(得分:1)
程序中有两个$today
字段,一个是 Lecturer.java 中的name
,另一个是 person.java < / strong>。
问题是,您只是在调用Lecturer javs的private static String name;
字段,而没有进行设置。
答案 3 :(得分:0)
根据rgettman的答案修复了项目。
Lecturer
类应如下所示:
public class Lecturer extends Person {
double stipend = 9144;
public Lecturer(String n) {
super(n);
}
public Lecturer(String n, double stipend) {
super(n);
this.stipend = stipend;
}
public double getStipend() {
return stipend;
}
public void setStipend(double stipend) {
this.stipend = stipend;
}
public void writeOutput() {
System.out.println("Name: " + this.getName());
System.out.println("Stipend: " + getStipend());
}
}