I am going through my notes(after 5-6 months) and I am unable to understand the output given by following code :
class Base
{
    int x=20;
}
class Child extends Base 
{
    int x=50;
    public static void main(String arg[])
    {
       Base b = new Child();     //upcasting
       System.out.println(b.x);    // prints 20
    }
}
I expected the output to be 50 but the output is 20. I don't understand reason behind this output.
I know int x = 20 in Base is same as Child class's int x = 50 resulting in data hiding . Also reference id of Child class is in Base class reference variable b resulting in upcasting . 
Both of these should result in 50 as output , since b is having refernce id of the child class so b.x should be 50 and also because by data hiding int x= 50 hides int x = 20 .
So, why output is 50.
