所以我正在搞乱无意识和多态性。一切都很顺利,直到我到达测试人员,我必须做一个类型员工(我的超级班)的数组。目前尝试运行此程序给我这个错误。
线程“main”中的异常java.lang.NullPointerException
我假设这与我声明我有employeeArray = null;时有关。但是把它留下来我把每个员工都放到数组中会出错,它说必须启动员工数组,默认情况下通过包含employeeArray = null;来实现。我在java上的这本书并没有真正触及这些类型的数组,而且我一直无法在网上找到麻烦的答案。任何人都可以提供任何帮助将不胜感激。
我也试过这样的事情
Employee [] employeeArray = new Employee[3] ;
这并没有返回任何错误,但没有返回我正在寻找的东西。这更像我的需要,但我的超级和子类有问题吗?
public class EmployeeTest {
public static void main(String[] args){
Employee [] employeeArray = null;
SalariedEmployee employee1 = new SalariedEmployee("Esther", "Smith", "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(employeeArray[0].getEmployeeDetails);
System.out.println(employee1.toString()); // call the method from the sub class SalariedEmployee
System.out.println(employee2.toString()); // call the method from the sub class CommissionedEmployee
System.out.println(employee3.toString()); // call the method from the sub class SalPlusCommEmployee
}
答案 0 :(得分:9)
您需要使用
Employee [] employeeArray = new Employee[3];
以及在employeeArray[0].getEmployeeDetails()
但是在你的情况下,你不需要担心使用数组并给它一个大小,你可以改用ArrayList
,如下所示:
ArrayList<Employee> employees = new ArrayList<Employee>();
employees.add(new SalariedEmployee(...));
employees.add(new CommissionnedEmployee(...));
...
对于在员工上调用toString()
,您需要使用属性覆盖Employee类的toString()
方法,以及您想要的输出,否则您将获得默认值{{1 toString()
类,它输出类名和对象哈希码的十六进制表示。
你的Employee类应该有这个方法(类似的东西):
Object
答案 1 :(得分:0)
你的
Employee [] employeeArray = null;
可能会导致空指针,你应该识别数组。 添加这个
employeeArray = new Employee[3];
在那之后, 如果SalariedEmployee,CommissionedEmployee是Employee的子类,就没有问题了。
答案 2 :(得分:0)
此代码有效,请检查您的课程。
public static void main(String[] args) {
Object[] objets = new Object[3];
String s1 = new String("s1");
String s2 = new String("s2");
String s3 = new String("s3");
objets[0] = s1;
objets[1] = s2;
objets[2] = s3;
System.out.println(Arrays.asList(objets));
}