With regard to casting (and/or using the instanceof operator) there's an intricate difference between 2 classes and a class and an interface.
As you probably know it's impossible (as in "compilation fails") to cast (and/or use the instanceof operator) with 2 incompatible types (as in "not part of the same class hierarchy), e.g.
But for a class and an interface, there's a little gotcha. If casting (and/or) is allowed (as in "no compiler errors") depends on the class being marked final or not. More info in this excellent post. (Disclaimer: it's one of my own posts, so I might be a little bit biased )