Source of TestOverride.java


  1: // TestOverride.java

  3: class A                              // Define a class named A
  4: {
  5:     int i = 1;                       // An instance field
  6:     int f() { return i; }            // An instance method
  7:     static char g() { return 'A'; }  // A class method
  8: }


 11: class B extends A            // Define a subclass of A
 12: {
 13:     int i = 2;               // Shadow field i in class A
 14:     int f() { return -i; }   // Override instance method f in class A
 15:     static char g() { return 'B'; }  // Shadow class method g in class A
 16: }


 19: class TestOverride
 20: {
 21:     public static void main(String[] args)
 22:     {
 23:         B b = new B();             // Create a new object of type B
 24:         System.out.println(b.i);   // Refers to B.i; prints 2
 25:         System.out.println(b.f()); // Refers to B.f(); prints -2
 26:         System.out.println(b.g()); // Refers to B.g(); prints B
 27:         System.out.println(B.g()); // A better way to invoke B.g()

 29:         A a = (A)b;                // Casts b to an instance of class A
 30:         System.out.println(a.i);   // Now refers to A.i; prints 1
 31:         System.out.println(a.f()); // Still refers to B.f(); prints -2
 32:         System.out.println(a.g()); // Refers to A.g(); prints A
 33:         System.out.println(A.g()); // A better way to invoke A.g()
 34:     }
 35: }