In the code you have posted, tp is referring to a TParent. A TParent may not be a TChild. In your case it is new TParent(), which is definitely not a TChild. Hence casting it to a TChild will give you the ClassCastException.
If you had coded as follows-
you wouldn't get a ClassCastException cause tp is now referring to a TChild. You can safely cast it to a TChild. But an instanceof
test is always recommended.
Note that every TChild is a TParent but every TParent might not be a TChild.
I can't see your struts code, but given the way we code Action classes and forms generally, it's likely that form is indeed a Formbean. Thus I think you can cast it to a Formbean safely.