Alex Rivera | Logout

Polymorphism and method overloading

Asked 2011-02-10T18:02:23.353
27

I have a quick and straighforward question:

I have this simple class:

public class A
{
    public void m(Object o)
    {
      System.out.println("m with Object called");
    }

    public void m(Number n)
    {
       System.out.println("m with Number called");
    }
    public static void main(String[] args)
    {
       A a = new A();
       // why will m(Number) be called?
       a.m(null);
    }
}

UPDATE: actually is method with Number actually being called. Sorry about the confusion.

If I call a.m(null) it calls method with Number parameter.

My question is: why is this? where in the java language specification is this specified?

Edit
Report

1 Answer

27

First of all, it actually calls m(Number).

It happens because both methods are applicable, but m(Number) is the most specific method, since any argument of m(Number) can be passed to m(Object), but not vice versa.

If you replace m(Object) by m(String) (or add another method such as m(Date)), compiler would report ambiguity, since the most specific method can't be identified.

See the section Choosing the Most Specific Method in the Java Specification.

answered 2011-02-10T18:11:10.937

Your Answer