Skip to main content
2 of 4
edited body; edited title
Joachim Sauer
  • 11k
  • 3
  • 54
  • 45

Why does Java compiler decide whether you can call a method based on the "reference" type and not on actual "object" type?

I was just wondering why does Java compiler decide whether you can call a method based on the "reference" type and not on actual "object" type? To explain I would like to quote an example:

  class A
    {
       void methA()
       {
          System.out.println("Method of Class A.");
       } 
    }
    class B extends A
    {
       void methB()
       {
          System.out.println("Method of Class B.");
       }
       public static void main(String arg[])
       {
          A ob =new B();
          ob.methB();       // Compile Time Error
       }
     }

This will produce a Compile Time Error that method methB() not found in class A, although Object Reference "ob" contains an object of class B which consists of method methB(). Reason for this is that Java Compiler checks for the method in Class A (the reference type) not in Class B (the actual object type). So, I want to know whats the reason behind this.

Sahil Chhabra
  • 185
  • 1
  • 1
  • 9