Monday, August 16, 2010

AQuestion


public class AQuestion
{

    public void method(Object o)
    {
        System.out.println("Object Version");
    }

    public void method(String s)
    {
        System.out.println("String version");
    }

    public static void main(String[] args)
    {
        AQuestion question = new AQuestion();
        question.method(null);
    }
}

Output:
String version
Reason: According to JLS, if both methods are suitable for a method call then the method whose arguments are most specific is choosen. Here String argument is more specific than Object

Variant 2:
public class AQuestion
{

    public void method(Object o, String s)
    {
        System.out.println("Object Version");
    }

    public void method(String s, Object o)
    {
        System.out.println("String version");
    }

    public static void main(String[] args)
    {
        AQuestion question = new AQuestion();
        question.method(null, null);
    }
}


Output:
compilation error
AQuestion.java:19: reference to method is ambiguous, both method method(java.lang.Object,java.lang.String) in
com.sunil.scjp.puzzles.AQuestion and method method(java.lang.String,java.lang.Object) in com.sunil.scjp.puzzles.AQuestion match
        question.method(null, null);
                ^
1 error

Variant 3:

public class AQuestion
{

    public void method(StringBuffer sb)
    {
        System.out.println("StringBuffer Version");
    }

    public void method(String s)
    {
        System.out.println("String version");
    }

    public static void main(String[] args)
    {
        AQuestion question = new AQuestion();
        question.method(null);
    }
}

Output: compilation error
AQuestion.java:19: reference to method is ambiguous, both method method(java.lang.StringBuffer) in com.sunil.scjp.puzzles.AQuestion and method method(java.lang.String) in com.sunil.scjp.puzzles.AQuestion match
        question.method(null);
                ^
1 error

No comments:

Post a Comment