Java Reference
In-Depth Information
In our new version, we have a single method to serve the same purpose:
Concept:
public void addPost(Post post)
Subtype As an
analog to the
class hierarchy,
types form a type
hierarchy. The type
defined by a sub-
class definition is a
subtype of the type
of its superclass.
The parameters in the original version are defined with the types MessagePost and
PhotoPost , ensuring that we pass MessagePost and PhotoPost objects to these methods,
because actual parameter types must match the formal parameter types. So far, we have in-
terpreted the requirement that parameter types must match as meaning “must be of the same
type”—for instance, that the type name of an actual parameter must be the same as the type
name of the corresponding formal parameter. This is only part of the truth, in fact, because an
object of a subclass can be used wherever its superclass type is required.
8.7.1
Subclasses and subtypes
We have discussed earlier that classes define types. The type of an object that was created
from class MessagePost is MessagePost . We also just discussed that classes may have
subclasses. Thus, the types defined by the classes can have subtypes. In our example, the type
MessagePost is a subtype of type Post .
8.7.2
Subtyping and assignment
When we want to assign an object to a variable, the type of the object must match the type of
the variable. For example,
Concept:
Variables and
subtypes Variables
may hold objects of
their declared type
or of any subtype
of their declared
type.
Car myCar = new Car();
is a valid assignment, because an object of type Car is assigned to a variable declared to hold
objects of type Car . Now that we know about inheritance, we must state the typing rule more
completely: a variable can hold objects of its declared type or of any subtype of its declared
type.
Imagine that we have a class Vehicle with two subclasses, Car and Bicycle (Figure 8.9). In
this case, the typing rule admits that the following assignments are all legal:
Vehicle v1 = new Vehicle();
Vehicle v2 = new Car();
Vehicle v3 = new Bicycle();
Figure 8.9
An inheritance
hierarchy
 
Search WWH ::




Custom Search