// AccessField.java -- Accessing members using super (from Spec, 2nd, ยง15.11.2) interface I { int x = 0; } class T1 implements I { int x = 1; } class T2 extends T1 { int x = 2; } class T3 extends T2 { int x = 3; void test() { System.out.println("x = "+x); System.out.println("super.x = "+super.x); System.out.println("((T2)this).x= "+((T2)this).x); System.out.println("((T1)this).x= "+((T1)this).x); System.out.println("((I)this).x = "+((I)this).x); if (this instanceof T4) { System.out.println("((T4)this).x= "+((T4)this).x); } } } class T4 extends T3 { int x = 4; } class AccessField { public static void main(String[] args) { System.out.println ("T3 object"); new T3().test(); // 3,2,2,1,0 System.out.println ("\n(T3) T4 object"); ((T3) new T4()).test(); // 3,2,2,1,0,4 } }