Takie jest rozwiązanie:
public static void printMainInfo(Object object) {
    if (object instanceof Drawable)
        ((Drawable) object).draw();
    if (object instanceof Movable)
        ((Movable) object).move();
}
Czemu potrzebne jest rzutowanie / konwersja zawężająca? Czemu jeśli jest
public static void printMainInfo(Object object) {
    if (object instanceof Drawable)
        object.draw();
    if (object instanceof Movable)
        object.move();
}
to object nie ma dostępu do tych metod? Przecież wywołując w main metodę printMainInfo(), przesyłamy zmienne drawable typu Drawable i movable typu Movable - a mimo to musimy jest rzutować ponownie na te typy?