you're checking whether p1 is an instance of Child, but inside the condition, you're trying to cast p to a Child. Assigning a superclass object to a subclass reference is illegal. Although the compiler allows it, the JVM will report a ClassCastException.
This. Exactly this. This is what my therapist has been talking about. And now with a tiny ad:
a bit of art, as a gift, the permaculture playing cards