抽象类Java为什么我的程序只打印0.00?

时间:2016-11-15 04:17:29

标签: java abstract-class

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());
    }
}

1 个答案:

答案 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的值来自何处。快乐的搜索。