Передача массива объектов в метод - PullRequest
0 голосов
/ 18 октября 2018

Итак, я хочу использовать метод для записи нескольких объектов в соответствующие файлы.Однако я не знаю, как импортировать массив объектов без определения конкретного объекта.

People - это класс, предназначенный исключительно для хранения созданных объектов в массивах, поэтому к ним проще обращаться через другие классы.

Например

public class People {

    private Student[10];
    private Teacher[10];

    public void setStudentArray(Student, index) {
        Student[index] = Student;
    }

    public void setTeacherArray(Teacher, index) {
        Teacher[index] = Teacher;
    }
}

public class Student extends People {
    String name;
    int StudentID;
    public String getName() {
        return name;
    }
}

public class Teacher extends People {
    String name ;
    int Teacher ID;
    public String getName() {
        return name;
    }
}
public class Main {
    People p = new People();

    public void main (String[] args) {
        Student s = new Student("default-name" , 1);
        p.setStudentArray(s, 0);

        Teacher t = new Teacher("default-name", 1);
        p.setTeacherArray(t, 0);

        outputName(p.getStudentArray, 0);
        outputName(p.getTeacherArray, 0)
    }

    //THIS IS WHERE I AM STRUGGLING I dont know how to pass teachers or students array to it.
    //I want the Object[] parameter to accept both Student[] and Teacher[]

    public void outputName(Object[], index) {
        System.out.println(Object[index].getName);  
    }   
}

Я думаю, что мой метод взятия объекта [] неправильный, но я не знаю, как подойти к нему иначе.Я полагаю, что проблема в том, что Object [] является совершенно другим классом для Учителя [] и Студента [], и именно здесь я ошибаюсь.

Я хочу использовать метод .getName в классах Teacher и Student, чтобы напечатать имя Teacher of Student.(Я просто вижу, что передача работает.)

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

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

Ответы [ 3 ]

0 голосов
/ 18 октября 2018

То, что @ Li357 сказал, правильно ... Вы должны немного изменить свое моделирование.Даже если вам удалось передать Student [] как Object [], вы не смогли бы вызвать метод getName, так как он не является методом Object.

Так что лучшим моделированием было бы создание метода getNameметод People, и классы ученика и учителя будут наследовать его.

Тогда вы можете получить People [] в качестве аргумента метода outputName и использовать метод getName внутри.

0 голосов
/ 18 октября 2018

Прежде всего научитесь объявлять массив и выбирать допустимые переменные.

В своем классе People выполните следующие изменения.

public class People {
    //Declare arrays like this.
    private Student[] student;
    private Teacher[] teacher;

    //Initialize arrays
    public People(){
        student = new Student[10];
        teacher = new Teacher[10];
    }
    public void setStudentArray(Student s,int index) {
        student[index] = s;
    }

    public void setTeacherArray(Teacher t, int index) {
        teacher[index] = t;
    }

    //Add getter methods
    public Student[] getStudentArray(){
        return student;
    }

     public Teacher[] getTeacherArray(){
        return teacher;
    }
}

Внутри подклассов Ученик и Учитель добавляют конструктор аргументов

Наконец, в вашем методе outputName вы можете сделать что-то вроде этого.

 public static void outputName(Object[] obj, int index) {

    if(obj instanceof Student[]){
        Student[] s = (Student[])obj;//parsing to student array
        System.out.println("Student name : "+s[index].getName());
    }

    if(obj instanceof Teacher[]){
        Teacher[] teacher = (Teacher[])obj;//parsing to teacher array
        System.out.println("Teacher name : "+teacher[index].getName());
    }


}  

Выход:

Student name : default-name
Teacher name : default-name
0 голосов
/ 18 октября 2018

Итак, класс People расширен как на Student, так и Teacher.

Какие здесь общие черты?

  1. String name присутствует в обоих Studentи Teacher
  2. public String getName() также присутствует в Student и Teacher

Вы можете переместить эти общности в класс People.Также убедитесь, что атрибуты name и getName удалены из класса Ученик и Учитель

Так что ваш People обновленный класс может быть:

public class People {
    private String name; //Newly added

    private Student[10];   //This ideally shouldn't be in People class rather a different class
    private Teacher[10];   //This ideally shouldn't be in People class rather a different class

    public void setStudentArray(Student, index) {
      Student[index] = Student;
    }

    public void setTeacherArray(Teacher, index) {
      Teacher[index] = Teacher;
    }

    public String getName() {
      return name;
    }

    public void setName() {
      this.name = name;
    }
}

Метод выходного имени должен бытькак:

public void outputName(People[] people, index) {
    System.out.println(people[index].getName());  
}

ПРИМЕЧАНИЕ: я здесь не исправляю синтаксис, а просто даю идею.

...