我有兩個類,一類是基礎類(員工),另一個它的子類繼承了其它(延長),其的代碼如下所示:繼承在Perl
package Employee;
require Exporter;
our @EXPORT = ("getattr");
our $private = "This is a class level variable";
sub getattr {
print "Inside the getattr function of Employee.pm module \n";
$self = shift;
$attr = shift;
return ($self->{$attr});
}
1;
===== ===========
package Extend;
use base qw(Employee);
sub new {
print "Inside new method of Employee.pm \n";
my $class = shift;
my %data = (
name => shift,
age => shift,
);
bless \%data , $class;
}
sub test {
print "Inside test method of Extend class \n";
}
1;
==================
現在我的代碼另一塊其使用Extend班級:
use Extend;
my $obj = Extend->new("Subhayan",30);
my $value = $obj->getattr("age");
print ("The value of variable age is : $value \n");
$obj->test();
print "Do i get this : $obj.$private \n";
我的問題是關於在父類中定義的變量$ private。按照我的繼承的概念,父類的屬性和方法應該可以通過子類對象獲得。例如,函數getattr運行良好。但是,爲什麼我無法使用基類Extend對象訪問$ private變量。
我在這裏錯過了什麼?有人可以幫忙嗎?
請注意,您在此處使用'Exporter'不正確。導出和繼承是兩個完全獨立的機制,如果你正在編寫面向對象的代碼,那麼你不需要'Exporter'。爲公共屬性編寫特定的訪問方法也許更好,因爲你的getattr允許直接訪問所有的實例變量,而不管它們是公開的還是私有的。在調用代碼 – Borodin