Инициализация массива пользовательского типа - PullRequest
4 голосов
/ 09 марта 2012

Так что я бездельничаю с наследственностью и полиморфизмом.Все шло отлично, пока я не добрался до тестера, где мне нужно было создать массив типовых сотрудников (мой суперкласс).В настоящее время попытка запустить эту программу выдает мне эту ошибку.

Исключение в потоке "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
}

Ответы [ 3 ]

9 голосов
/ 09 марта 2012

Вам нужно использовать

Employee [] employeeArray = new Employee[3];

, а также добавлять скобки в конце employeeArray[0].getEmployeeDetails()

Но в вашем случае вам не нужночтобы беспокоиться об использовании массива и присвоении ему размера, вы можете использовать ArrayList вместо этого, например так:

ArrayList<Employee> employees = new ArrayList<Employee>();
employees.add(new SalariedEmployee(...));
employees.add(new CommissionnedEmployee(...));
...

Как и для вызова toString() насотрудник, вам необходимо переопределить свойство toString() для класса Employee, независимо от того, каким будет выходной результат, в противном случае вы получите значение по умолчанию toString() класса Object, которое выводит имя класса и шестнадцатеричное числопредставление хеш-кода объекта.

Ваш класс Employee должен иметь этот метод (что-то вроде этого):

public String toString() {
    return this.name + " " + this.firstName ...;
}
0 голосов
/ 09 марта 2012

Этот код работает, пожалуйста, проверьте ваши классы.

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

}
0 голосов
/ 09 марта 2012

ваш

Employee [] employeeArray = null;

может вызвать нулевой указатель, вы должны определить массив ,.добавьте

employeeArray = new Employee[3];

после этой строки.если SalariedEmployee, CommissionedEmployee являются подклассами Employee, проблем не будет,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...