Java Reference
In-Depth Information
Ultimately, we would plan on removing the
display
methods completely from these classes. A
great benefit of defining just a
toString
method is that we do not mandate in the
Post
classes
what exactly is done with the description text. The original version always printed the text to
the output terminal. Now, any client (e.g., the
NewsFeed
class) is free to do whatever it chooses
with this text. It might show the text in a text area in a graphical user interface; save it to a file;
send it over a network; show it in a web browser; or, as before, print it to the terminal.
The statement used in the client to print the post could now look as follows:
System.out.println(post.toString());
In fact, the
System.out.print
and
System.out.println
methods are special in this
respect: if the parameter to one of the methods is not a
String
object, then the method auto-
matically invokes the object's
toString
method. Thus we do not need to write the call explic-
itly and could instead write
System.out.println(post);
Now consider the modified version of the
show
method of class
NewsFeed
shown in Code 9.4.
In this version, we have removed the
toString
call. Would it compile and run correctly?
Code 9.4
New version of
NewsFeed show
method
public
class
NewsFeed
{
// fields, constructors, and other methods omitted
/**
* Show the news feed. Currently: print the news feed details
* to the terminal. (To do: replace this later with display
* in web browser.)
*/
public
void
show()
{
for
(Post post : posts) {
System.out.println(post);
}
}
}
In fact, the method
does
work as expected. If you can explain this example in detail, then you
probably already have a good understanding of most of the concepts that we have introduced in
this and the previous chapter! Here is a detailed explanation of the single
println
statement
inside the loop.
■
The for-each loop iterates through all posts and places them in a variable with the static type
Post
. The dynamic type is either
MessagePost
or
PhotoPost
.
■
Because this object is being printed to
System.out
and it is not a
String
, its
toString
method is automatically invoked.
■
Invoking this method is valid only because the class
Post
(the static type!) has a
toString
method. (Remember: Type checking is done with the static type. This call would not be
Search WWH ::
Custom Search