Win a copy of Mesos in Action this week in the Cloud/Virtualizaton forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

what will be the output and why

 
kesava chaitanya
Ranch Hand
Posts: 140
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
package example;

class dup
{
public static void main(String[] args)
{
System.out.println("Hello World!");
dup a=new dup();
a.m1(null);
}
void m1(Throwable t)
{
System.out.println("Throwable");
}
void m1(Exception t)
{
System.out.println("Exception");
}
void m1(StringBuffer t)
{
System.out.println("StirngBuffer");
}

}


when i run this class i am gettiing this exception

Error(9,5): reference to m1 is ambiguous; both method m1(java.lang.Exception) in class example.dup and method m1(java.lang.StringBuffer) in class example.dup match

if i remove this method

void m1(StringBuffer t)
{
System.out.println("StirngBuffer");
}

application is compiled fine;

when i run the class

i am getting o/p

Hello World!
Exception

but i assumed o/p will be

Hello World!
Throwable

why??
 
Ernest Friedman-Hill
author and iconoclast
Marshal
Pie
Posts: 24211
35
Chrome Eclipse IDE Mac OS X
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
When resolving overloaded methods, the compiler chooses the most specific applicable overload. Because Exception is a subclass of Throwable the m1(Exception) overload is "more specific". On the other hand, there's no way to decide which of Exception or StringBuffer matches better, so with all three methods, you get the compile error.
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic