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.