The Java Program: AccessMethod.java

  1 // AccessMethod.java -- Method invocation using super (from Spec, 2nd, §15.12.4.9)
  2 
  3 class AM1 {
  4    String s() { return "1"; }
  5 }
  6 class AM2 extends AM1 {
  7    String s() { return "2"; }
  8 }
  9 class AM3 extends AM2 {
 10    String s() { return "3"; }
 11    void test() {
 12       System.out.println("s()=\t\t"+s());
 13       System.out.println("super.s()=\t"+super.s());
 14       System.out.print("((AM2)this).s()=\t");  // Makes no difference
 15       System.out.println(((AM2)this).s());
 16       System.out.print("((AM1)this).s()=\t");
 17       System.out.println(((AM1)this).s());     // Makes no difference
 18       System.out.print("((AM4)this).s()=\t");
 19       if (this instanceof AM4) {
 20          System.out.println(((AM4)this).s());
 21       }
 22    }
 23 }
 24 
 25 class AM4 extends AM3 {
 26    String s() { return "4"; }
 27 }
 28 
 29 
 30 class AccessMethod {
 31    public static void main (String[] args) {
 32       System.out.println ("AM3 object");
 33       new AM3().test();          // 3,2,3,3
 34       System.out.println ("\n(AM3) AM4 object");
 35       ((AM3) new AM4()).test();  // 4,2,4,4,4
 36    }
 37 }