Because the class VideoTape
does not have the variables director
nor rating
,
so its show()
method can't use them.
We need a new show()
method in the class Movie
:
// added to class Movie public void show() { System.out.println( title + ", " + length + " min. available:" + avail ); System.out.println( "dir: " + director + " " + rating ); }
Now, even though the parent has a show()
method
the new definition of show()
in the child class will override
the parent's version.
A child's method overrides a parent's method when it has the same signature as a parent method. Now the parent has its method, and the child has its own method with the same signature. (Remember that the signature of a method is the name of the method and its parameter list.)
An object of the parent type will include the method given in the parent's definition. An an object of the child type will include the method given in the child's definition.
With the change in the class Movie
the
following program will print out the full information for both items.
class TapeStore { public static void main ( String args[] ) { VideoTape item1 = new VideoTape("Microcosmos", 90 ); Movie item2 = new Movie("Jaws", 120, "Spielberg", "PG" ); item1.show(); item2.show(); } }
The line item1.show()
calls the show()
method
defined in VideoTape
, and
the line item2.show()
calls the show()
method
defined in Movie
.
Microcosmos, 90 min. available:true Jaws, 120 min. available:true dir: Spielberg PG