抽象类Java为什么我的程序只打印0.00?
抽象类Java为什么我的程序只打印0.00抽象类Java为什么我的程序只打印0.00?,java,abstract-class,Java,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
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");
}
}
}
请解释一下为什么我的程序只打印零。我想这就是我的问题所在
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.00的来源并不太困难 在for loop In main中,您使用
peops[i].getMonthlyPay()
获取要打印的数字。因此,让我们研究一下getMonthlyPay()
的实现。有两种实现,一种在受薪员工
中,另一种在受薪员工
中
如果是SalariedEmployee
,getMonthlyPay
方法使用字段yearSalary
的值。将哪个值分配给年薪
?您是否已使用编辑器或IDE查找所有出现的yearlary
,以查看分配给它的值的位置。你会发现它在任何地方都不会发生。因为yearlary
是一个字段(更准确地说,是一个实例变量),所以Java从一开始就为它赋值0.00(方法中的局部变量是不同的)。由于从未分配任何其他值,因此当getMonthlyPay()
将其除以12并返回结果时,该值仍然为0.00。这就是0.00的来源。你能找到一个解决办法吗
对于
WageEmployee
-您应该自己尝试同样的练习,在WageEmployee.getMonthlyPay()
中找出值的来源。这一次,您需要找出工资
的值以及小时
的值的来源。愉快的搜索。这是学习使用调试器的最佳时机,使用此工具可以帮助您首先识别并解决错误。作为旁注,在向本网站或任何网站发布代码以寻求帮助时,您应该努力将其格式化,以便人们能够阅读。这包括对代码进行适当的常规缩进。public WageEmployee(字符串名称、整数编号、双薪、整数小时)
。。。我在父类Employee
中没有看到兼容的已定义构造函数。您设置了yearlary=getMonthlyPay()
,并且getMonthlyPay()
被定义为monthlyPay=yearlary/12
。那么年薪取决于月薪,月薪取决于年薪?这已经没有什么意义了。另外,我看不到在哪里初始化yearSalary
变量。Chit,您正在为构造函数中的参数赋值——不要这样做。正在寻找重复项以结束此操作。您认为员工
构造函数的双薪
参数在做什么,您为什么这么认为?当构造函数结束时,您认为参数的值存储在何处,为什么您这样认为?
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());
}
}