所以我一直在使用继承,但我遇到了一个问题。我对超级和扩展命令很新,并且可能有一个明显的错误,我只是缺少语法。基本上我有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
我认为这个问题要么与测试人员在一起,要么与超级人员有关,但为了以防万一而包括其他问题。我知道现在阵列似乎毫无意义,但我稍后会需要它,所以这就是为什么它就在那里。再次感谢你们给予的任何帮助!
答案 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;