my $base=new BaseClass();
$base->baseMethod1();
$base->baseMethod2();
my $sub1=new SubClass1();
$sub1->baseMethod1();
$sub1->baseMethod2();
$sub1->subMethodA();
my $sub1=new SubClass2();
$sub1->baseMethod1();
$sub1->baseMethod2();
$sub1->subMethodB();
package BaseClass;
sub new {
my $class=shift;
my $self={};
bless $self, $class;
return $self;
}
sub baseMethod1 {
my $self=shift;
print "baseMethod1 in BaseClass\n";
return $self;
}
sub baseMethod2 {
my $self=shift;
print "baseMethod2 in BaseClass, expected to be overridden\n";
return $self;
}
package SubClass1;
use base qw(BaseClass);
sub new {
my $class=shift;
my $self={};
bless $self, $class;
return $self;
}
sub subMethodA {
my $self=shift;
print "subMethodA, new method in SubClass1\n";
}
sub baseMethod2 {
my $self=shift;
print "baseMethod2 has been overriden by SubClass1\n";
}
package SubClass2;
use base qw(BaseClass);
sub new {
my $class=shift;
my $self={};
bless $self, $class;
return $self;
}
sub subMethodB {
my $self=shift;
print "subMethodB, new method in SubClass2\n";
}
sub baseMethod2 {
my $self=shift;
print "baseMethod2 base been overriden by SubClass1\n";
}