Help coderanch get a
new server
by contributing to the fundraiser
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Ron McLeod
  • Paul Clapham
  • Devaka Cooray
  • Liutauras Vilda
Sheriffs:
  • Jeanne Boyarsky
  • paul wheaton
  • Henry Wong
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Tim Moores
  • Carey Brown
  • Mikalai Zaikin
Bartenders:
  • Lou Hamers
  • Piet Souris
  • Frits Walraven

Doubt with constructor overloading

 
Ranch Hand
Posts: 274
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
source http://www.valoxo.ch/jr/mocks/mock01a.html Q42

What is the output of the following code when compiled and run? Select one correct answer.
public class Question42{
Question42(byte b){System.out.println("in byte");}
Question42(short s){System.out.println("in short");}
Question42(char c){System.out.println("in char");}
Question42(int i){System.out.println("in int");}
public static void main(String[] args){
Question42 q42 = new Question42(2);
}
}

A. Prints: in int

B. Prints: in char

C. Prints: in byte

D. Prints: in short

E. Compilation error because of ambiguous constructor invocation.

Ans: A
Doubt: why not C as it is the best match?


pls help,
Gitesh
[ September 06, 2007: Message edited by: Gitesh Ramchandani ]
 
Ranch Hand
Posts: 63
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
The value 2 could be set into byte int and short also if am not wrong. There is no way to identify who should be given preference. I think thats the reason for compilation to fail.
 
Ranch Hand
Posts: 71
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
A number literal that is less than long, is taken as int, even if it fits a smaller type.
By the way, this is not constructor overriding, but overloading.
 
Gitesh Ramchandani
Ranch Hand
Posts: 274
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
If I modify the question as follows:



I get answer:


In the above case whats happening as compared to my doubt in 1st post?

Please help,
Gitesh
 
Ranch Hand
Posts: 1274
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Howdy, cowboys!

You cannot override constructors, because they are not inherited.
You are talking about overloading - and be prepared for text-only questions that will test your knowledge about nomenclature as well.
You should not mix the technical terms, not even in talking to your co-ranchers.

The question does not necessarily has anything to do with constructors at all, the same would work with methods:

prints:
int
float



In the first part, no type conversion is needed, so foo just takes an int as the int number.
In the second part, there is no bar method for an int parameter, so in this case the compiler takes the "slowest" higher method possible.


Quizzzzz:
What constructor will be chosen here?


;)

Yours,
Bu
 
Gitesh Ramchandani
Ranch Hand
Posts: 274
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Bu thanks..

well i compiled the quiz, it is looking for an int constructor.

I got my answer thanks.
 
With a little knowledge, a cast iron skillet is non-stick and lasts a lifetime.
reply
    Bookmark Topic Watch Topic
  • New Topic