19.09.2015 Views

Prentice.Hall.Introduction.to.Java.Programming,.Brief.Version.9th.(2014).[sharethefiles.com]

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

11.7 Polymorphism 421<br />

important <strong>to</strong> be familiar with the methods provided by the Object class so that you can use<br />

them in your classes. This section introduces the <strong>to</strong>String method in the Object class.<br />

The signature of the <strong>to</strong>String() method is:<br />

<strong>to</strong>String()<br />

public String <strong>to</strong>String()<br />

Invoking <strong>to</strong>String() on an object returns a string that describes the object. By default, it<br />

returns a string consisting of a class name of which the object is an instance, an at sign (@),<br />

and the object’s memory address in hexadecimal. For example, consider the following code<br />

for the Loan class defined in Listing 10.2:<br />

string representation<br />

Loan loan = new Loan();<br />

System.out.println(loan.<strong>to</strong>String());<br />

The output for this code displays something like Loan@15037e5. This message is not very<br />

helpful or informative. Usually you should override the <strong>to</strong>String method so that it returns a<br />

descriptive string representation of the object. For example, the <strong>to</strong>String method in the<br />

Object class was overridden in the GeometricObject class in lines 46–49 in Listing 11.1<br />

as follows:<br />

public String <strong>to</strong>String() {<br />

return "created on " + dateCreated + "\ncolor: " + color +<br />

" and filled: " + filled;<br />

}<br />

Note<br />

You can also pass an object <strong>to</strong> invoke System.out.println(object) or<br />

System.out.print(object). This is equivalent <strong>to</strong> invoking<br />

System.out.println(object.<strong>to</strong>String()) or<br />

System.out.print(object.<strong>to</strong>String()). Thus, you could replace<br />

System.out.println(loan.<strong>to</strong>String()) with<br />

System.out.println(loan).<br />

print object<br />

11.7 Polymorphism<br />

Polymorphism means that a variable of a supertype can refer <strong>to</strong> a subtype object.<br />

The three pillars of object-oriented programming are encapsulation, inheritance, and polymorphism.<br />

You have already learned the first two. This section introduces polymorphism.<br />

First, let us define two useful terms: subtype and supertype. A class defines a type. A type<br />

defined by a subclass is called a subtype, and a type defined by its superclass is called a<br />

supertype. Therefore, you can say that Circle is a subtype of GeometricObject and<br />

GeometricObject is a supertype for Circle.<br />

The inheritance relationship enables a subclass <strong>to</strong> inherit features from its superclass with<br />

additional new features. A subclass is a specialization of its superclass; every instance of a<br />

subclass is also an instance of its superclass, but not vice versa. For example, every circle is a<br />

geometric object, but not every geometric object is a circle. Therefore, you can always pass an<br />

instance of a subclass <strong>to</strong> a parameter of its superclass type. Consider the code in Listing 11.5.<br />

Key<br />

Point<br />

subtype<br />

supertype<br />

LISTING 11.5<br />

PolymorphismDemo.java<br />

1 public class PolymorphismDemo {<br />

2 /** Main method */<br />

3 public static void main(String[] args) {

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!