// 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 */