in reply to [SOLVED]: Trying to understand method calling in OOP
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!
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Trying to understand method calling in OOP
by haukex (Archbishop) on May 09, 2018 at 11:00 UTC | |
by Perl300 (Friar) on May 09, 2018 at 21:56 UTC |