在Perl中是否可以在不实现构造函数的情况下创建子类?我不需要任何特定于子类的构造函数行为,所以我想从父类继承.
在这个例子中,我有一个基类Base.pm和一个子类Child.pm. Child类应该简单地覆盖其父类的一个方法:
# test.pl use strict; use warnings; use Child; my $o = Child->new(); $o->exec();
–
# Base.pm package Base; sub new{ my $self = {}; bless $self; return $self; } sub exec{ my $self = shift; die "I'm in the Base class\n"; } 1;
–
# Child.pm package Child; use Base; @ISA = ('Base'); sub exec{ my $self = shift; die "OVERRIDE in child\n"; } 1;
当我运行test.pl时,Base类的exec方法被执行(我假设它是因为该对象在Base.pm构造函数中被祝福为Base).
$./test.pl I'm the Base class
有没有办法实现子类而不必重新实现构造函数?
解决方法
是.
您有效地拥有以下内容:
sub new { return bless({}); }
将其替换为以下内容:
sub new { my $class = shift; return bless({},$class); }
基本上,总是使用bless
的双参数形式.
我是如何编写构造函数的:
>基类:
sub new { my ($class,...) = @_; my $self = bless({},$class); $self->{...} = ...; return $self; }
>派生类:
sub new { my ($class,...) = @_; my $self = $class->SUPER::new(...); $self->{...} = ...; return $self; }
我喜欢对称性.