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