Win a copy of Re-engineering Legacy Software this week in the Refactoring forum
or Docker in Action in the Cloud/Virtualization forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

From the office.

 
Jean-Francois Alban
Greenhorn
Posts: 5
  • Likes 1
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi guys

Here's a code we were playing with at the office.
What do you think is the expected outcome (no cheating don't run).
Also please provide a why to your answer. Thanks guys!!

 
Helen Ma
Ranch Hand
Posts: 451
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator

public class Toto {

public static void main(String[] args) {
Toto toto = new Toto();
System.out.print(toto.toString(toto.getMyObj()));
}

MyObj getMyObj(){
return new MySubObj();
}

String toString(MyObj swap){
return "MyObj";
}

String toString(MySubObj swap){
return "MySubObj";
}
}

class MyObj{

}

class MySubObj extends MyObj{

}
public class Toto {

public static void main(String[] args) {
Toto toto = new Toto();
System.out.print(toto.toString(toto.getMyObj()));
}

MyObj getMyObj(){
return new MySubObj();
}

String toString(MyObj swap){
return "MyObj";
}

String toString(MySubObj swap){
return "MySubObj";
}
}

class MyObj{

}

class MySubObj extends MyObj{

}



I think the answer is MyObj.
From the code , the toString method seems overloaded correctly.
Step 1. toto.getMyObj() returns a MyObj object which is actually a MySubObj.
Step 2. What is passed in as the argument of toto.toString()? an object of MyObj type
Step 3. So, the toString(MyObj swap) is called instead of toString(MySubObj)
Step 4 Therefore, it prints MyObj.
Correct me if I am wrong.
 
Jean-Francois Alban
Greenhorn
Posts: 5
  • Likes 1
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
That's correct.
Naturally I would have assume that at runtime the JMV would sort it out and use MySubObj.
 
With a little knowledge, a cast iron skillet is non-stick and lasts a lifetime.
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic