Here m1() is overriden in the subclass, so calling to this method depends on the actual object in this case 't' of subclass, But there is a cast to Super, in this case it doesnt matter because JVM already figured which method to call which again depends on the actual object type.
Here m2() is redifined in subclass, so casting to type Super will work here because subclass doesnt override it. remember static methods are not inherited, hence cannot be overriden
K&B, p. 130: "static members can also be accessed using an instance reference variable, someObj.theStaticMethodName() but that�s just a syntax trick; the static method won�t know anything about the instance referred to by the variable used to invoke the method. The compiler uses the class type of the reference variable to determine which static method to invoke."
is using the trick; the following yields the same and is more appropriate: