Требования:
1. Метод cleanAllApartments должен принимать список аппартаметов в качестве параметра.
2. В методе cleanAllApartments для всех однокомнатных аппартаментов(Apt1Room) содержащихся в списке необходимо вызвать метод clean1Room.
3. В методе cleanAllApartments для всех двухкомнатных аппартаментов(Apt2Room) содержащихся в списке необходимо вызвать метод clean2Rooms.
4. В методе cleanAllApartments для всех трехкомнатных аппартаментов(Apt3Room) содержащихся в списке необходимо вызвать метод clean3Rooms.
5. Классы Apt1Room, Apt2Room, Apt3Room должны поддерживать(реализовывать) интерфейс Apartment.
Решение:
public class Solution {
public static void main(String[] args) {
List<Apartment> apartments = new ArrayList<Apartment>();
apartments.add(new Apt1Room());
apartments.add(new Apt2Room());
apartments.add(new Apt3Room());
cleanAllApartments(apartments);
}
public static void cleanAllApartments(List<Apartment> apartments) {
for (int i = 0; i < apartments.size(); i++){
if (apartments.get(i) instanceof Apt1Room) {
((Apt1Room) apartments.get(i)).clean1Room();
}
if (apartments.get(i) instanceof Apt2Room) {
((Apt2Room) apartments.get(i)).clean2Rooms();
}
if (apartments. get(i) instanceof Apt3Room) {
((Apt3Room) apartments.get(i)).clean3Rooms();
}
}
}
static interface Apartment {
}
static class Apt1Room implements Apartment {
void clean1Room() {
System.out.println("1 room is cleaned");
}
}
static class Apt2Room implements Apartment {
void clean2Rooms() {
System.out.println("2 rooms are cleaned");
}
}
static class Apt3Room implements Apartment {
void clean3Rooms() {
System.out.println("3 rooms are cleaned");
}
}
}
Зачем здесь требуется приведение типов? Например, в 4-й строчке явно создается объект класса Apt1Room он и передается, зачем его приводить к самому себе?