Win a copy of Clojure in Action this week in the Clojure forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Use of null in method call

 
Sandeep Ghosh
Ranch Hand
Posts: 145
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi
Could anybody give the explanation regarding this problem.
Read the code below. Will be the result of attempting to compile and run the code below.

Prob 1
public class AQuestion
{
public void method(Object o)
{
System.out.println("Object Verion");
}
public void method(String s)
{
System.out.println("String Version");
}
public static void main(String args[])
{
AQuestion question = new AQuestion();
question.method(null);
}
}
Answers
The code does not compile.
The code compiles cleanly and shows "Object Version".
The code compiles cleanly and shows "String Version"
The code throws an Exception at Runtime.
Prob 2
Read the code below. Will be the result of attempting to compile and run the code below.

public class AQuestion
{
public void method(StringBuffer sb)
{
System.out.println("StringBuffer Verion");
}
public void method(String s)
{
System.out.println("String Version");
}
public static void main(String args[])
{
AQuestion question = new AQuestion();
question.method(null);
}
}
Answers
The code does not compile.
The code compiles cleanly and shows "StringBuffer Version".
The code compiles cleanly and shows "String Version"
The code throws an Exception at Runtime.
Output of first prob is String Version....and second prob compile time error Why???
 
Valentin Crettaz
Gold Digger
Sheriff
Posts: 7610
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
When two methods have the same name but a different parameter type, the most specific one is invoked.
In the first problem, one takes an Object and the other one a String as argument. A String is more specific than an Object because String is a subclass of Object, and thus, the method taking a String as argument gets invoked.
In the second problem, one method takes a String and the other one a StringBuffer as argument. String and StringBuffer are in no way related to each other, we say that they are sibling classes in the class hierarchy because they both are subclasses of Object but none is a subclass of the other. Thus, when giving null as argument, the compiler has no way to know which method to invoke and an error is raised.
 
It is sorta covered in the JavaRanch Style Guide.
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic