getClass method returns the class of the instance it is called on. This means that the result of calling .getClass() on a variable of type Foo could be Foo.class or the .class of any of its subclasses.ClassCastException, at runtime the compiler modifies the return type of the method to Class<? extends Foo>.