/*
   OverrideExample.java
   Burton Rosenberg
   Mon Mar 23 13:41:27 EST 1998

    EXAMPLE RUN:
    appomattox> java OverrideExample
    b.c = B
    ((A)b).c = A
    B's f(int): 2
    B's f(int): 2
    A's g(int):1
    A's g(int):1
    B's g().
    appomattox>

*/

class A extends Object {
     char c='A' ;

     void f(int i) {
        System.out.println("A's f(int): "+i) ;
     }

     void g(int i) {
        System.out.println("A's g(int):"+i) ;
     }
}

class B extends A {
     char c='B' ;      // B's c shadows A's c

     void f(int i) {   // B's f overrides A's f
        System.out.println("B's f(int): "+2*i) ;
     }
     void g() {        // B's g overloads A's g
        System.out.println("B's g().") ;
     }
}

public class OverrideExample extends Object {

   public static void main( String [] argv ) {

       B b = new B() ;
       System.out.println("b.c = "+ b.c ) ;
       System.out.println("((A)b).c = "+ ((A)b).c ) ;
       b.f(1) ;
       ((A)b).f(1) ;

       b.g(1) ;
       ((A)b).g(1) ;
       b.g() ;

//       ((A)b).g()  ; 
/* compiler error:
appomattox> javac OverrideExample.java
OverrideExample.java:44: No method matching g() found in class A.
       ((A)b).g()  ;
               ^
1 error
*/

   }

}
