This week's book giveaway is in the General Computing forum. We're giving away four copies of Arduino in Action and have Martin Evans, Joshua Noble, and Jordan Hochenbaum on-line! See this thread for details.
A cast can never change the type of an object; it just tells the compiler something that it doesn't know. If you have a class Animal and two subclasses Cat and Dog, then you can cast a variable of type Animal to type Cat if, and only if, that variable actually contains a Cat (or null, I suppose, to be complete.) You can never convert an instance of one class into another with a cast: if you really have an Animal object, or a Dog, it's not legal to cast it to a Cat.