Массив наследования Java

#java

#java

Вопрос:

     class Employee extends Person {
    
    private double salary;
    private int departmentId;
    
    public void setSalary(double s) {
        this.salary = s;
    }
    
    public double getSalary() {
        return salary;
    }
    
    public void setDepartmentId(int i) {
        this.departmentId = i;
    }
    
    public int getDepartmentId() {
        return departmentId;
    }
}
  

Класс отдела

 class Department extends Employee {
    private String[] department[];
    
    public String[][] getDepartment() {
        return department;
    }
  

Я пытался отобразить что-то вроде, если пользователь вводит 1, выделенный 1 в массиве что-то напечатает. Но каждый раз, когда я использую этот синтаксис

 Employee[] e1 = new Employee[6];
e1[1] = "asd"; 
  

Пожалуйста, помогите. я вроде как получаю несоответствие типа ошибки: не удается преобразовать строку в employee

Комментарии:

1. Вам нужно присвоить экземпляру Employee значение e1[1], а не строку.

2. Да, но я хочу сохранить строку в моем массиве

3. Тогда вам нужно использовать a String[] , Java не может волшебным образом преобразовывать типы

4. Ваша структура классов не имеет смысла. Мы читаем «extends» как «is a»: затем вы пишете, что Отдел является сотрудником. Я думаю, вы слишком далеко продвинулись в своей кривой обучения программированию. Наберитесь терпения и пошагово следуйте некоторым курсам по основам программирования или учебным пособиям.

5. Я просто хочу использовать эту штуковину getDepartment, потому что я думаю, что это то, чего хочет от нас мой профессор.

Ответ №1:

Я думаю, я понимаю, что вы пытаетесь сделать. Прежде всего Department , не должно расширяться Employee . Это имело бы смысл только в том случае, если в вашей квартире был какой-то сотрудник. Во-вторых, ваш массив department представляет собой массив массивов, потому что вы используете квадратные скобки 2 раза. Если вы просто сделаете его обычным массивом, вы можете использовать его для сохранения всех названий отделов. Теперь вам нужен только способ установить эти отделы и конструктор для создания объекта класса, и ваш класс отдела готов:

 class Department {
    private String[] department;
    
    public Department() { }

    public String[] getDepartment() {
        return department;
    }

    public void setDepartment(String[] newDepartment) {
        department = newDepartment;
    }
}
  

Ваш класс Employee также должен получить конструктор, чтобы вы могли создать объект класса:

 public Employee() { }
  

Теперь вам нужно создать массив строк со всеми отделами в нем и передать его вашему классу. Затем вы можете использовать индекс этих отделов в качестве идентификатора отдела в employee:

 String[] departmentNames = new String[6];
Department departmentManager = new Department();
Employee e1 = new Employee();

departmentNames[0] = "xyz";
departmentNames[1] = "asd";
//...

departmentManager.setDepartment(departmentNames);

e1.setDepartmentId(1);
  

Теперь departmentId in employee показывает, какая запись массива в department является его отделом, и вы можете показать это, вызвав:

 System.out.println(departmentManager.getDepartment()[e1.getDepartmentId()]);