You have your inheritance the wrong way round. Cats and dogs are types of animal, so the Cat and Dog classes need to inherit from Animal - not the other way round.
package Animal; sub new { my $class = shift; my $self = {}; bless ($self, $class); return $self; } 1; ------------------------------------------------------------------- package Cat; use strict; use Animal; our @ISA = qw(Animal); sub speak { print "meow...\n"; } 1; ------------------------------------------------------------------- package Dog; use strict; use Animal; our @ISA = qw(Animal); sub speak { print "woof...\n"; } 1; --------------------------------------------------------- #!/usr/bin/perl use strict; use warnings; use Dog; use Cat; my $dog = Dog->new(); my $cat = Cat->new(); $dog->speak; $cat->speak;
I've also removed the "ref($proto) || $proto" cargo-culting from your code. If you want people to be able to call your constructor as an object method as well as a class method then you should probably have another (object method) constructor called "clone" or "copy". It's generally considered bad practice to have one constructor that is used as both.
"The first rule of Perl club is you do not talk about
Perl club."
-- Chip Salzenberg
In reply to Re: OO & multiple inheritance.
by davorg
in thread OO & multiple inheritance.
by yoda54
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |