Interesting observation! If test1() would have been static too, you could not done that. Mind it, I am theorizing.
To call a static test1(), you do not need to create an object of testSuper class, in that case, if static test() was called from inside of test1(), it was like access super static method test() without declaring its type or defining its object.
I mean : testSuper t; on another line, t.test(); Think about it.
Even though a subclass has access to all methods in its super class, but this holds true only if you have created its object.
Now come to your question, your test1() is instance method, so you needed object of testSuper(). This lets you access super static or non-static methods.
As per your comment, if I declare test1 method to be static then definitely compiler wont allow to use not static super keyword inside static context. According to your second suggession, if I just declare reference type of testSuper but dont create an instance of it like testSuper t; t.test1(); where test1() is instance method then I get an error that variable t might not have been initialized as the declaration is inside method.
So the basic question is how am I able to access static superclass method using super keyword?
Porbably Manish is trying to understand. So, to him, to know what can be done and what can not be done is more important than a wrong or right technique. In my earlier post, I clarified that to access a static member, you need declaration of that type So, Super1 s; now you can say s.test(); Here s is not static. The same thing you are achieving through super. So, you are accessing static method via a non-static reference. Manish, either you wrongly interpreted my earlier post, or I have not clearly put my point straightforward.