BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        Person person = null;
        String key;
        while (!(key = reader.readLine()).equals("exit")) {
            if ("player".equals(key)) {
                person = new Player();
            } else if ("dancer".equals(key)) {
                person = new Dancer();
            }
            haveFun(person);
        }
    }

    public static void haveFun(Person person) {
        //напишите тут ваш
        if(person instanceof Player) {
            ((Player) person).play();
        }
        if(person instanceof Dancer) {
            ((Dancer) person).dance();
        }
    }
   interface Person {
    }

    static class Player implements Person {
        void play() {
            System.out.println("playing");
        }
    }

    static class Dancer implements Person {
        void dance() {
            System.out.println("dancing");
        }
    }
}
Задача решена верно, валидатор пропустил, но я не понимаю. То есть если строчка == этой строчке вывод "playing", но с Dancer все иначе, пишу допустим f и он выводит "dancing". Как работает код?