Okay. Events occur in the following order when you hit the line
"Processor p = new Processor();" in your main function.
First the Processor() constructor is invoked. The first thing it does is invoke it's parent constructor. That means we next go into the Process() constructor. The first thing it does is invoke it's parent constructor, i.e. Object(). We can ignore the Object constructor since it has no visible effect on what transpires.
In the constructor, since this is the first element of this class encountered, we need to do static initialization. (I know I'm really talking about class loading, but this still describes the order of what happens.) First Process() (base class) static initialization is done, then Processor (derived class) static initialization is done. In your example, there is no static initization, but it's important to know that class Processor (derived class) static initialzation is done before Process (base class) object (instance) variable initialization is done.
Next, we do the non-static part of the base class (Process) constructor, including the initialization of instance variables. First, we set the local (Process) variable b to a value of 127. Then we call this.methodA(). Note that "this" is really a "Processor" (derived class) reference, not a "Process" (base class) reference. Therefore, due to
polymorphism, we actually invoke the "Processor" (derived class) version of methodA().
Inside the Processor methodA() method, the value of b is printed. In Processor methodA(), "this" is considered a reference to a Processor (derived class) object. Therefore, it's the Processor version of value b that gets printed. Note that there hasn't been any initialization yet in the Processor (derived) class. Therefore, the value that gets printed is zero.
Next, we return from Processor.methodA() back to the Process (base class) constructor. Here there's nothing more to do, so we exit back to the Processor (derived class) constructor.
Now that we're back in the derived class, we do all the local instance initialization. That is, we set the value of b to 126. Note how this occurs after the base class constructor has already printed out it's value via a call to method methodA().
Finally, we execute the statment[s] in the constructor, which prints out the just initialized value of b, which is 126.
The point of this question is that the entire base class constructor is executed before any part of the derived class constructor. That includes object (instance) variable initialization. The not yet itinialized instance variables in in the derived class can be accessed and manipulated from within the base class constructor via overridden method calls (polymorphism).
You know, I think I answered this question once before, too. Oh well.
Bill