// INHERIT7a

// effects of variable shadowing? note:
// + methods use variables from the class in which the method is implemented

class A {
    public int x = 1;
    public int getX_1() { return x + getX_2(); }
    public int getX_2() { return x; }
}
class B extends A {
    public int x = 3;
    public int getX_2() { return x; }
}

public class inherit7a {
    public static void main(String[] args) {
	B b = new B();
	System.out.println("no overriding: "+b.getX_1());
	// getX_1 uses x=1 because x=1 is written in same class as getX_1
	// getX_2 is called using the version in class B because of 
	// overriding -- since the version in B is used, x=3 was returned

	System.out.println("overriding:    "+b.getX_2());
	System.out.println("direct access: "+b.x);
	A a = new B();
	System.out.println("no overriding: "+a.getX_1());
	System.out.println("overriding:    "+a.getX_2());
	System.out.println("direct access: "+a.x);
    }
}

/* output:
no overriding: 4
overriding:    3
direct access: 3
no overriding: 4
overriding:    3
direct access: 1
*/



