perl中的继承和默认构造函数

时间:2011-09-21 03:10:27

标签: perl oop inheritance

我有以下代码: -

package A;

sub new{
 //constructor for A
}

sub hello{
 print "Hello A";
}

1;

package B;
use base qw(A);

sub hello{
 print "Hello B";
}

1;

我的问题是我如何实例化B,即我的$ b = B-> new(),而不给B一个构造函数,我需要在A中做些什么改变来实现这一点。这可能吗?

感谢。

2 个答案:

答案 0 :(得分:3)

是。将其用作A的{​​{1}}方法:

new

关键是当使用sub new { my ($cls, @args) = @_; # ... my $obj = ...; # populate this bless $obj, $cls; } 时,第一个参数是B->new(在我的示例中我绑定到B)。因此,如果您使用$cls致电bless,该对象将获得正确的套餐。

答案 1 :(得分:3)

根据Chris的回答,您的代码现在应该如下:

package A;
sub new{
    my ( $class ) = @_;
    my $self = {};
    bless $self, $class;
}
sub hello{
    print "Hello A";
}

package B;
use base qw(A);
sub hello{
    print "Hello B";
}

package main;
my $b = B->new;
$b->hello;

B只是继承A的构造函数。