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