// AccessMethod.java -- Method invocation using super (from Spec, 2nd, ยง15.12.4.9)
// NB.  javac -encoding utf8 AccessMethod.java

class AM1 {
   String s() { return "1"; }
}
class AM2 extends AM1 {
   String s() { return "2"; }
}
class AM3 extends AM2 {
   String s() { return "3"; }
   void test() {
      System.out.println("s()=\t\t"+s());
      System.out.println("super.s()=\t"+super.s());
      System.out.print("((AM2)this).s()=\t");  // Makes no difference
      System.out.println(((AM2)this).s());
      System.out.print("((AM1)this).s()=\t");
      System.out.println(((AM1)this).s());     // Makes no difference
      System.out.print("((AM4)this).s()=\t");
      if (this instanceof AM4) {
	 System.out.println(((AM4)this).s());
      }
   }
}

class AM4 extends AM3 {
   String s() { return "4"; }
}


class AccessMethod {
   public static void main (String[] args) {
      System.out.println ("AM3 object");
      new AM3().test();          // 3,2,3,3
      System.out.println ("\n(AM3) AM4 object");
      ((AM3) new AM4()).test();  // 4,2,4,4,4
   }
}