why can we cast from a Super Class down to a Subclass like so:

```
Object o = getStringObject();
String str = (String) o;

```

but then use the same principle to cast an interface DOWN to a sub-type E.G.?

```
InterfaceType anInterface;
anInterface = (InterfaceType) SubClassVar;

```

so EXAMPLE 1 is all fine and dandy. What i Don't understand is that if an interface is a super-type of a class that implements it, then how do we not have a ClassCastException when we downcast the class to the interface, if within the hierarchy the interface is higher? i read somewhere that there's a difference between casting via classes, and interfaces, but of course they didn't feel like explaining why, so i'm left in the open. Thanks, Stack!