The output of the below program is P.printS1 Q.printS2 Q.printS1
When q calls printS1 directly, Q's static method is being called, which is good.
But, when q calls printS1 indirectly, through printS1S2, superclass P's static method is being called.
WHY IS THIS HAPPENING SO?
class P {
static void printS1(){System.out.print("P.printS1 ");}
void printS2() {System.out.print("P.printS2 ");}
void printS1S2(){printS1();printS2();}
}
class Q extends P {
static void printS1(){System.out.print("Q.printS1 ");}
void printS2(){System.out.print("Q.printS2 ");}
public static void main(
String[] args) {
Q q=new Q();
q.printS1S2();
q.printS1();
}}