in reply to Re: Inheritance - calling parent constructor
in thread Inheritance - calling parent constructor

thanks for the info - that works for me. I wonder the difference between using class name and SUPER? Is it OK to not have a constructor in the child object? This seems to work.
  • Comment on Re^2: Inheritance - calling parent constructor

Replies are listed 'Best First'.
Re^3: Inheritance - calling parent constructor
by kennethk (Abbot) on Dec 29, 2009 at 18:52 UTC
    The difference between hard-coding Parent-> as opposed to invoking SUPER is relevant when you have multiple levels of inheritance. If you created a Grandchild, a method using SUPER would climb the @ISA tree to resolve new, whereas hard-coding Parent-> will go straight there. It's also useful for code reuse, since SUPER is not package specific. For example, if you had a series of validation routines, you could open sub validate { with my $self = shift; $self->SUPER::validate(); and it would crawl the inheritance tree correctly without refactoring and the associated fagility.

    You would only need to define a constructor in the child object if it requires additional functionality - in this case, because Child has an additional property.

    If you are interested in all this or rolling your own OO, a read read through of perlboot and perltoot is merited.

Re^3: Inheritance - calling parent constructor
by ikegami (Patriarch) on Dec 29, 2009 at 23:13 UTC
    You could use
    my $self = $class->Parent::new(...);
    instead of
    my $self = $class->SUPER::new(...);

    And you might even have to in some weird situations (although use mro 'c3'; would probably be a better fix).

    But using Parent is redundant. You already specified it's the parent class. To use it here is to needlessly hardcode a value. Nothing good can come of that.