В задаче, конструкции вида:
if(person instanceof Person.User) {
            ((Person.User) person).live();
        }
вводят меня в ступор. Находил максимум небольшую теорию с легчайшими примерами. А вот литературы с такими примерами не видел. Можно сказать наугад и подбором решаю задачи про сужение и расширение типов. Плюсом ide IJ часто помогает..