我可以在不实现子构造函数的情况下创建Perl子类吗?
发布时间:2020-12-16 06:05:26 所属栏目:大数据 来源:网络整理
导读:在Perl中是否可以在不实现构造函数的情况下创建子类?我不需要任何特定于子类的构造函数行为,所以我想从父类继承. 在这个例子中,我有一个基类Base.pm和一个子类Child.pm. Child类应该简单地覆盖其父类的一个方法: # test.pluse strict;use warnings;use Chi
在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 classn"; } 1; – # Child.pm package Child; use Base; @ISA = ('Base'); sub exec{ my $self = shift; die "OVERRIDE in childn"; } 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); } 基本上,总是使用 我是如何编写构造函数的: >基类: sub new { my ($class,...) = @_; my $self = bless({},$class); $self->{...} = ...; return $self; } >派生类: sub new { my ($class,...) = @_; my $self = $class->SUPER::new(...); $self->{...} = ...; return $self; } 我喜欢对称性. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |