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 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access