Конструктор Teacher (Учитель) не определен - PullRequest
0 голосов
/ 14 марта 2019

Я использую конструктор копирования и Inheritance в классе с именем «Department» для вызова информации из класса «Teacher», который является подклассом «Person».После создания моих методов set / get я получаю вышеуказанную ошибку.У кого-нибудь есть понимание того, почему это происходит?

Код из класса 'Department':

public class Department {
private String deptName;
private int numMajors;
private Teacher[] listTeachers; //inherits from Person class
private Student[] listStudents; //inherits from Person class

    // First constructor for Department
    public Department(String dn, int nm, Teacher[] listTeachers, Student[] listStudents) {
    this.deptName = dn;
    this.numMajors = nm;

    this.listTeachers = new Teacher[listTeachers.length];
    for (int i = 0; i < this.listTeachers.length; i++)
    {
        this.listTeachers[i] = new Teacher (listTeachers[i]);
    }

    //set method for Teachers Array
    public void setListTeachers (Teacher[] other) {
    this.listTeachers = new Teacher[other.length];
    for (int i = 0; i < listTeachers.length; i++) {
        this.listTeachers[i] = new Teacher (other[i]);
    }
}

    //get method for Teachers Array
    public Teacher[] getListTeachers() {
    Teacher[] copyTeachers = new Teacher[listTeachers.length];
    for (int i = 0; i < copyTeachers.length; i++) {
        copyTeachers[i] = new Teacher(this.listTeachers[i]);
    }
    return copyTeachers;
}

Вот строки, дающие мне ошибки:

1) this.listTeachers[i] = new Teacher (listTeachers[i]);

2) this.listTeachers[i] = new Teacher (other[i]);

3) copyTeachers[i] = new Teacher(this.listTeachers[i]);

Код из класса «Учитель»:

public class Teacher extends Person {
private String id;
private int salary;
private int num_yr_prof;

//Constructor for use in Teacher main method.
public Teacher(String n, int a, String s, boolean al, String i, int sal, int numyr) {
    super(n, a, s, al);
    this.id = i;
    this.salary = sal;
    this.num_yr_prof = numyr;
}

//Copy constructor for use in Department class.
public Teacher (String n, int a, String s, boolean al, Teacher other) {
    super(n, a, s, al);
    if (other == null) {
        System.out.println("Fatal Error!");
        System.exit(0);
    }

    this.id = other.id;
    this.salary = other.salary;
    this.num_yr_prof = other.num_yr_prof;
}

Ответы [ 2 ]

1 голос
/ 14 марта 2019

Ваш конструктор копирования может выглядеть следующим образом:

    public Teacher(Teacher teacher) {
        this( teacher.n, teacher.a, teacher.s, teacher.al, 
              teacher.id, teacher.salary, teacher.num_yr_prof );
    }

Поскольку вы не показываете код для класса Person, я использовал здесь имена переменных n, a, s и al.Они должны быть заменены именами переменных в классе Person.Это, конечно, предполагает, что эти переменные являются либо общедоступными, либо защищенными.Если они являются частными, вам нужно использовать геттеры для этих переменных (желательно, даже если они общедоступны или защищены).

1 голос
/ 14 марта 2019

Вам нужно, чтобы ваш класс Учителя получил конструктор, который принимает Учителя:

public Teacher(Teacher teacher) {
// do something
}
...