почему в строках 12-20 мы вызваем сужение типов? в интерфейсе же нет шаблона.
public class Solution {
    public static void main(String[] args) {
        List<Apartment> apartments = new ArrayList<Apartment>();
        apartments.add(new OneRoomApt());
        apartments.add(new TwoRoomApt());
        apartments.add(new ThreeRoomApt());

        cleanAllApartments(apartments);
    }

    public static void cleanAllApartments(List<Apartment> apartments) {
        for (Apartment apartment : apartments) {
            if (apartment instanceof OneRoomApt)
            ((OneRoomApt) apartment).clean1Room();

            else if (apartment instanceof TwoRoomApt)
            ((TwoRoomApt) apartment).clean2Rooms();

            else if (apartment instanceof ThreeRoomApt)
            ((ThreeRoomApt) apartment).clean3Rooms();
        }
    }

    interface Apartment {
    }

    static class OneRoomApt implements Apartment {
        void clean1Room() {
            System.out.println("1 room is cleaned");
        }
    }

    static class TwoRoomApt implements Apartment {
        void clean2Rooms() {
            System.out.println("2 rooms are cleaned");
        }
    }

    static class ThreeRoomApt implements Apartment {
        void clean3Rooms() {
            System.out.println("3 rooms are cleaned");
        }
    }
}