On Sun, Mar 16, 2003 at 10:08:41PM -0500, Chris Dutton wrote:
> On Sunday, March 16, 2003, at 05:09 PM, David Storrs wrote:
>
> > ==QUESTION
> > - Page 8 says "In some languages, all methods are multimethods." I
> > believe that Java is one of these. Is that right and what are some
> > others? (This is really just curiousity.)
> > ==/
>
> Doesn't C++ work this way? Also I believe Pike allows overloading of
> methods by default.
Nope. C++ will only dispatch on the type of the first argument (the
implicitly-passed argument which becomes the "this" pointer).
> > ==QUESTION
> > - Given the following code, what is called by $ride.current_speed()?
> >
> > class Vehicle {
> > my $speed;
> > method current_speed() { return $speed; }
> > method set_speed($n) { $speed = $n; }
> > }
> >
> > class Car {
> > submethod current_speed() {
> > print SUPER.current_speed();
> > return SUPER.current_speed();
> > }
> > }
> >
> > class A6 { }
> >
> > my $ride = new A6; # Perl with German engineering???
> > $ride.set_speed(60); # Calls Vehicle.set_speed()
> > print $ride.current_speed(); # Calls what?
>
> Unless this is more complicated than I think, Car's current_speed() is
> called.
I should have included the relevant quote (which I can't find right
now). This was a question specifically related to submethods. If I
understand correctly, submethods allow you to declare a method in a
base class, and override it in a derived class such that the
overidden submethod is not visible from classes derived from there on
down. So, if I'm right about this, calling $ride.current_speed() will
actually call Vehicle's method, because Car's is not visible (being a
submethod).
> That said, a minor nitpick is that you'd want something more like
>
> class Vehicle { ... }
> class Car is Vehicle { ... }
> class A6 is Car { ... }
D'oh! Yes, of course.
--Dks