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 ...