This week's book giveaway is in the OO, Patterns, UML and Refactoring forum. We're giving away four copies of Refactoring for Software Design Smells: Managing Technical Debt and have Girish Suryanarayana, Ganesh Samarthyam & Tushar Sharma on-line! See this thread for details.
Because the assignment of explicit value to s of Child will be after the execution of all super class constructor.
You have called instance method method() of Child class from Parent() which in turn calls instance variable s of Child. Since still Parent class constructor's execution is not completed, so printing s will return null.
Calling method() in Child constructor will give you the explicit assigned value.
In the main method, when you are instantiating a child object, the child constructor will be called first whose first line calls the constructor in super class. Now, the String reference variable in Child class is not initialized yet since the constructor has not completed. Now the method() is called (which is the method in the Child class). This will print the default value for a field which is null in this case. After all this, the constructor completes giving the variable the value.