我有以下代码: -
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中做些什么改变来实现这一点。这可能吗?
感谢。
答案 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
的构造函数。