继承返回空值

时间:2012-03-09 17:08:18

标签: java inheritance syntax polymorphism

所以我一直在使用继承,但我遇到了一个问题。我对超级和扩展命令很新,并且可能有一个明显的错误,我只是缺少语法。基本上我有5个类,一个超级,三个子和1个测试类。在我尝试运行测试器类之前,一切看起来都很好,而且我希望在实例化变量时找到输入的数据,而是返回null值。我需要知道这是否是我如何声明它们的问题,或者它是否只是我的超级和子类的问题。您可以给予任何建议,我将不胜感激。

为了不填满屏幕,我在这个粘贴箱中包含了我的超级和子类:

超级:http://pastebin.com/eZLXvknz

Sub1:http://pastebin.com/PFgApK3Y

Sub2:http://pastebin.com/QKDjB9g4

这是我的测试人员类:

public class EmployeeTest {


public static void main(String[] args){

 Employee [] employeeArray = new Employee[3] ; 
 SalariedEmployee employee1 = new SalariedEmployee("Andrea", "Doroshenko", "111-111-111", 6, 2011, 2400); 
 CommissionedEmployee employee2 = new CommissionedEmployee("Nick", "McRae", "222-222-222", 1, 1998, 50000, 0.1);
 SalPlusCommEmployee employee3 = new SalPlusCommEmployee("Dan", "Mills", "333-333-333", 3, 2011, 1000, 0.05, 500 );

    employeeArray[0] = employee1;
    employeeArray[1] = employee2;
    employeeArray[2] = employee3;

    System.out.println(employee1.getEmployeeDetails());
    System.out.println(employee2.getEmployeeDetails());
    System.out.println(employee3.getEmployeeDetails());


}

//end main
}
//end class

我认为这个问题要么与测试人员在一起,要么与超级人员有关,但为了以防万一而包括其他问题。我知道现在阵列似乎毫无意义,但我稍后会需要它,所以这就是为什么它就在那里。再次感谢你们给予的任何帮助!

3 个答案:

答案 0 :(得分:2)

Employee构造函数中,您不会初始化员工功能。就这样。初始化它们。

答案 1 :(得分:1)

首先关闭:从你的课程中获取所有静态垃圾。他们不属于他们,他们会把你弄得一团糟。

如,

public class CommissionedEmployee extends Employee
{
    static double commRate;
    static double salesMade;

    public CommissionedEmployee(String firstName, String lastName, String SINNumber, int startMonth, int startYear, double salesMade, double commRate)
    {
        super(firstName, lastName, SINNumber, startMonth, startYear);
    }

    public static double getcommRate()
    { 
        return commRate;
    }
    public static double setcommRate()
    { 
        return commRate = setcommRate();
    }

    public static double getSalesMade()
    { 
        return salesMade;
    }
    public static double setsalesMade()
    { 
        return salesMade = setsalesMade();
    }

    public String getEmployeeDetails()
    {
        return ("This Employee is " + firstName + lastName + " this employee has the SIN " + sinNumber + "and is " + gender + ". This is a commisioned employee");
    }

    public double getEarnings()
    {
        return commRate * salesMade;
    }

}

当你创建一个静态变量时,你会说这个变量将保存代表状态的信息,而不是类的对象。所以每个对象总是保持相同的静态值,这不是你想要的。您希望CommissionedEmployee拥有自己的commRate和他自己的salesMade值,并且声明这些值及其相关方法是静态的,这将毁了你。

答案 2 :(得分:1)

超类的构造函数永远不会分配它获得的值。没有(例如):

this.firstName = firstName;