396 APPENDIX A: Introduction to Java
This is, at compile time, the call methodA( ) on var1 will be checked against a reference type of var1,
ClassA, by the compiler, and the compiler will allow it because the methodA( ) exists in ClassA.
But what will happen if we run the test; that is, which methodA( ) will be called, methodA( ) in ClassA or
methodA( ) in ClassB? When the test is run, it gives the following output:
methodA() in ClassB
The compiler checked methodA( ) in ClassA but executed methodA( ) in ClassB. This is because at
runtime, the JVM verifies, instead of compiles, methodA( ) against the actual object type. The actual
object type in the code (ClassA var1 = new ClassB();) is ClassB, while ClassA is a reference type.
So, the JVM checks whether the call methodA( ) is in ClassB( ) and calls it. This phenomenon is called
polymorphism. What will happen if methodA( ) is not in ClassB? To understand this, we implement the
code for Figure A-4.
Figure A-4. Hierarchy of ClassB