Ok, in your case, because the Cow class has its own speak() method, this line:
Animal::speak('Cow');
...is actually not being called, the one in Cow is instead.
Now, if you comment out or otherwise remove the Cow->speak() method from the Cow class, what will happen is, when you call Cow->speak(), that method will not be found, and since you are inheriting from Animal, Animal->speak() will be looked up instead, and if found, it'll call it, sending in the Cow class as the parameter to the inherited Animal->speak(). Observe:
use warnings; use strict; package Animal; { sub speak { my ($class) = @_; if ($class eq 'Cow'){ print "$class says moooo!\n"; } } sub run { my ($class) = @_; print "$class is running away!\n"; } } package Cow; { our @ISA = qw(Animal); } package Rooster; { our @ISA = qw(Animal); } package main; Cow->speak; Rooster->run;
Output:
Cow says moooo! Rooster is running away!
In reply to Re: Trying to understand method calling in OOP
by stevieb
in thread [SOLVED]: Trying to understand method calling in OOP
by Perl300
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |