Class Inheritance
As with the rest of Perl's object system, inheritance
of one class by another requires no special syntax to be added to the
language. When you invoke a method for which Perl finds no subroutine
in the invocant's package, that package's @ISA
array[5] is examined. This is how Perl implements inheritance:
each element of a given package's @ISA
array holds
the name of another package, which is searched when methods are
missing. For example, the following makes the Horse
class a subclass of the Critter
class. (We declare
@ISA
with our
because it has to
be a package variable, not a lexical declared with
my
.)
package Horse; our @ISA = "Critter";
You should now be able to use a
Horse
class or object everywhere that a
Critter
was previously used. If your new class
passes this empty subclass test, you know that
Critter
is a proper base class, fit for
inheritance.
Suppose you have a Horse
object in
$steed
and invoke a move
method
on it:
$steed->move(10);
Because $steed
is a Horse
,
Perl's first choice for that method is the
Horse::move
subroutine. If there isn't one, instead
of raising a run-time exception, Perl consults the first element of
@Horse::ISA
, which directs it to look in the
Critter
package for
Critter::move
. If this subroutine isn't found
either, and Critter
has its
own @Critter::ISA
array, then that too will be
consulted for the name of an ancestral package that might supply a
move
method, and so on back up the inheritance hierarchy until we come to a package without ...
Get Programming Perl, 3rd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.