Как я могу позволить моим различным объектам в моем ArrayList выполнять метод, который есть у каждого класса (salaris())

#java #object #arraylist

#java #объект #arraylist

Вопрос:

Допустим, у вас разные сотрудники, но у каждого класса employee есть метод salary() . Как я могу заставить эти разные объекты, которые я создал и поместил в ArrayList, использовать метод salary() ?

 public void betaalSalarissen(){
    for(int counter = 0;werknemers.size()>counter;counter  ){
        Class objectClass = werknemers.get(counter).getClass();
        **objectClass.salaris();** //this won't work, help please!

    }
}
public void neemInDienst(Object persoon){   //objects from different classes, different employees
    werknemers.add(persoon);
}
 

Ответ №1:

Нет причин пытаться получить класс; просто используйте полиморфизм.

 public class Employee {
    public double salaris() { ... }
}
public class CommissionedEmployee extends Employee {
    @Override
    public double salaris() { ... }
}

List<Employee> employees = new ArrayList<>();
// add some employees of whatever subtype(s)
for (Employee e : employees) {
    e.salaris();
}
 

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

1. Я только что попробовал это, и это тоже сработало! Я думаю, что мне просто нужно лучше понять полиморфизм. Спасибо, друг.

Ответ №2:

быстрое решение здесь — привести результат из werknemers.get(counter)``to your класса Employee` (имя класса только что угадано)

 ((Employee)werknemers.get(counter)).salaris();
 

но в конечном итоге вы должны применить общий параметр к переменной коллекции и параметру методов:

 private Collection<Employee>  werknemers = new ArrayList<>();

public void neemInDienst(Employee persoon){   //objects from different classes, different employees
    werknemers.add(persoon);
}
 

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