Abstract Class Java为什么我的程序只打印0.00?
public class TestEmployee
{
public static void main(String[] args)
{
Employee[] folks = new Employee[4];
folks[0] = new SalariedEmployee("Suzy",123,520000.00);
folks[1] = new WageEmployee("Fred",456,7.50,40);
folks[2] = new SalariedEmployee("Harry",234,45000.00);
folks[3] = new WageEmployee("Rita",345,7.76,38);
for(int i=0; i<folks.length; i++)
{
System.out.println(folks[i].getName()
+ " earns " + folks[i].getMonthlyPay() + " each month");
}
}
}
我添加了需要制作的缺失类 程序编译并正常运行
abstract class Employee
{
private String name;
private int number;
public abstract double getMonthlyPay();
public Employee(String name, int number, double salary)
{
setName(name);
setNumber(number);
salary = getMonthlyPay();
}
public Employee(String name, int number, double salary, int hours)
{
setName(name);
setNumber(number);
salary = getMonthlyPay();
}
public String getName()
{
return this.name;
}
public int getNumber()
{
return this.number;
}
public String setName(String name)
{
this.name = name;
return this.name;
}
public int setNumber(int number)
{
this.number = number;
return this.number;
}
}
请提供解释或了解为什么我的程序只打印零。我认为这就是我的问题所在
class SalariedEmployee extends Employee
{
private double yearSalary;
public SalariedEmployee(String name, int number, double salary)
{
super(name, number, salary);
yearSalary = getMonthlyPay();
}
public double getMonthlyPay()
{
double monthlyPay = yearSalary / 12;
return monthlyPay;
}
public String toString()
{
return(super.getName() + ", " + super.getNumber() + ", " + getMonthlyPay());
}
}
class WageEmployee extends Employee
{
private double wage;
private int hours;
public WageEmployee(String name, int number, double salary, int hours)
{
super(name, number, salary, hours);
}
public double getMonthlyPay()
{
double monthlyPay = wage * hours * 4;
return monthlyPay;
}
public String toString()
{
return(super.getName() + ", " + super.getNumber() + ", " + getMonthlyPay());
}
}
答案 0 :(得分:1)
跟踪0.00来自哪里并不太难。
在主循环中使用folks[i].getMonthlyPay()
来获取要打印的数字。那么让我们来看看getMonthlyPay()
的实现。有两种实现,一种在SalariedEmployee
中,另一种在WageEmployee
中。
如果SalariedEmployee
getMonthlyPay
方法使用字段yearSalary
的值。哪个值分配给yearSalary
?让编辑器或IDE查找yearSalary
的所有实例,以查看为其分配值的位置。你会发现它无处可去。由于yearSalary
是一个字段(更准确地说,是一个实例变量),Java从一开始就为它分配0.00(方法中的局部变量是不同的)。由于您从未指定任何其他值,因此当getMonthlyPay()
将其除以12并返回结果时,该值仍为0.00。所以这就是0.00来自的地方。你能找到办法解决吗?
如果是WageEmployee
- 您应该自己尝试相同的练习,找出价值来自WageEmployee.getMonthlyPay()
的位置。这一次,您需要找出wage
的值和hours
的值来自何处。快乐的搜索。