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.