class A
class B
class TestOverride
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: }