Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trialBrent Mayberry
1,029 PointsHow does promptNewSong() in KaraokeMachine.java know to use the override for toString()?
In this code block:
private Song promptNewSong() throws IOException {
System.out.print("Enter the artist's name: ");
String artist = mReader.readLine();
System.out.print("Enter the title: ");
String title = mReader.readLine();
System.out.print("Enter the video URL: ");
String videoURL = mReader.readLine();
return new Song(artist, title, videoURL);
}
When this private method returns the Song
object, how does the override to toString()
get called so that the input is formatted the way we specified earlier if we don't explicitly call toString()
? Does it have something to do with the nature of toString()
?
Thanks in advance. I appreciate your help.
1 Answer
Enrique Munguía
14,311 PointsI quite don't understand your question, so I will elaborate on the way toString() works. This method is inherited by every class from the Object class, when you override it you can specify any string to represent your instance in a printed form. One peculiarity of toString() is that it will be called implicitly when you print an instance of an object:
CustomObject obj = new CustomObject();
System.out.println(obj); // prints the String representation provided by toString()
Is equivalent to this
CustomObject obj = new CustomObject();
System.out.println(obj.toString()); // here we are calling toString() explicitly
For the purpose of this example I use CustomObject class, but in fact it could be an instance of any class, and this will work.
Brent Mayberry
1,029 PointsBrent Mayberry
1,029 PointsThis answers my question. I must have missed the memo that
toString()
is inherited by every class and that it is implicitly called whenever you print an instance of an object.Thanks for taking the time to explain this. It seemed like "magic" that the output was formatted the way we had overridden the
toString()
method. Now I get how this happens.