У меня есть абстрактный класс Person
, в котором трое детей: Admin
, Employee
и Student
. Существует только один объект администратора.
У меня также есть класс, его "имя" - Statics
и содержит все необходимые мне публичные c данные, например:
public class Statics {
private static Person currentLoginUser;
private static ArrayList<Person> people = new ArrayList<>();
private static ArrayList<Student> students = new ArrayList<>();
private static ArrayList<Employee> employees = new ArrayList<>();
//We don't need ArrayList<Admin> because there is only one admin in the whole program
//Adder and getter methods:
//...
}
Вы можете спросить, что такое ArrayList<Person>
в коде? Когда я создаю объект, я добавляю его как к «массиву собственных типов», так и к «ArrayList<Person>
». Так что у ArrayList<Person>
есть все.
Как я уже сказал, у меня есть только 1 администратор:
Person admin = new Admin(); //`Admin` extends `Person`
Я хочу создать метод (в Admin
классе), который принимает arrayList из Person
в качестве ввода и распечатывает данные. Итак, я сделал это:
//Admin class:
public void printList(ArrayList<Person> people){
//Do something
}
Предположим, admin
хочет увидеть список учеников: я называю это так:
ArrayList<Student> s = Statics.getStudents();
((Admin)admin).printList(s); //admin object was created by `Person` class so I have to cast it to (Admin) to use `Admin`'s own methods.
Это (затмение) говорит, что:
Метод printList (ArrayList <<code>Person>) в типе Admin не применим для аргументов (ArrayList <<code>Student>)
Я пытался приведите его к человеку:
((Admin)admin).printList((ArrayList<Person>)s);
на этот раз я получил эту ошибку:
Невозможно привести из ArrayList <<code>Student> к ArrayList <<code>Person>
В этой ссылке ответ состоит в том, чтобы передать основной массив arrayList и проверить, принадлежат ли ему объекты типа "Student" или нет, а затем вывести его значение, но я не хочу проверять весь Person
arrayList каждый раз! Я просто хочу метод, который принимает и arrayList детей Person
(Employee
, Student
, et c) и печатает их.