package Employee4; ## ## An example of inheritance with both some further methods defined for the derived class ## and overridden methods demonstrating polymorphism. ## See testemp3.pl . use Person5; ## load this class @ISA = ("Person5"); ## inherit the class methods as needed. use Carp; my $Debugging = 0; ## global in Employee3 ... ## need to initialise the new fields provided by this class sub new { my $class = shift; my $self = $class->SUPER::new(); $self->{SALARY} = undef; $self->{ID} = undef; $self->{START_DATE}; return $self; } ## Unique Employee methods sub salary { my $self = shift; if (@_) { $self->{SALARY} = shift } return $self->{SALARY}; } sub id_number { my $self = shift; if (@_) { $self->{ID} = shift } return $self->{ID}; } sub start_date { my $self = shift; if (@_) { $self->{START_DATE} = shift } return $self->{START_DATE}; } ## Overridden methods - polymorphism ## This completely overrides Person5->peers. sub peers { my $self = shift; if (@_) { @{$self->{PEERS}} = @_; } return map { "PEON=\U$_" } @{ $self->{PEERS} }; } ## subclass/superclass sub debug { my $self = shift; confess "usage: thing->debug(level)" unless @_ = 1; my $level = shift; if (ref($self)) { $self->{_DEBUG} = $level; } else { $Debugging = $level; } $self->SUPER::debug($Debugging); } 1;