in reply to OO & multiple inheritance.
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
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: OO & multiple inheritance.
by herveus (Prior) on Nov 18, 2004 at 12:40 UTC | |
by Happy-the-monk (Canon) on Nov 18, 2004 at 13:40 UTC | |
|