人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當前位置:蘿卜系統下載站 > 技術開發教程 > 詳細頁面

Perl教學(13)Perl的面向對象編程之6

Perl教學(13)Perl的面向對象編程之6

更新時間:2022-08-24 文章作者:未知 信息來源:網絡 閱讀次數:

十一、子類方法的重載
繼承的好處在于可以獲得基類輸出的方法的功能,而有時需要對基類的方法重載獲得更具體或不同的功能。下面在Bean.pm類中加入方法printType(),代碼如下:

sub printType {
my $class = shift @_;
print "The type of Bean is $class->{'Bean'} \n";
}
然后更新其@EXPORT數組來輸出:
@EXPORT = qw ( setBeanType , printType );
現在來調用函數printType(),有三種調用方法:

$cup->Coffee::printType();
$cup->printType();
$cup->Bean::printType();
輸出分別如下:

The type of Bean is Mixed
The type of Bean is Mixed
The type of Bean is Mixed
為什么都一樣呢?因為在子類中沒有定義函數printType(),所以實際均調用了基類中的方法。如果想使子類有其自己的printType()函數,必須在Coffee.pm類中加以定義:

#
# This routine prints the type of $class->{'Coffee'}
#
sub printType {
my $class = shift @_;
print "The type of Coffee is $class->{'Coffee'} \n";
}
然后更新其@EXPORT數組:
@EXPORT = qw(setImports, declareMain, closeMain, printType);
現在輸出結果變成了:

The type of Coffee is Instant
The type of Coffee is Instant
The type of Bean is Mixed
現在只有當給定了Bean::時才調用基類的方法,否則直接調用子類的方法。
那么如果不知道基類名該如何調用基類方法呢?方法是使用偽類保留字SUPER::。在類方法內使用語法如:$this->SUPER::function(...argument list...); ,它將從@ISA列表中尋找。剛才的語句用SUPER::替換Bean::可以寫為$cup->SUPER::printType(); ,其結果輸出相同,為:

The type of Bean is Mixed
十二、Perl類和對象的一些注釋
OOP的最大好處就是代碼重用。OOP用數據封裝來隱藏一些復雜的代碼,Perl的包和模塊通過my函數提供數據封裝功能,但是Perl并不保證子類一定不會直接訪問基類的變量,這確實減少了數據封裝的好處,雖然這種動作是可以做到的,但卻是個很壞的編程風格。
注意:
1、一定要通過方法來訪問類變量。
2、一定不要從模塊外部直接訪問類變量。
當編寫包時,應該保證方法所需的條件已具備或通過參數傳遞給它。在包內部,應保證對全局變量的訪問只用通過方法傳遞的引用來訪問。對于方法要使用的靜態或全局數據,應該在基類中用local()來定義,子類通過調用基類來獲取。有時,子類可能需要改變這種數據,這時,基類可能就不知道怎樣去尋找新的數據,因此,這時最好定義對該數據的引用,子類和基類都通過引用來改變該數據。
最后,你將看到如下方式來使用對象和類:
use coffee::Bean;
這句語句的含義是“在@INC數組所有目錄的Coffee子目錄來尋找Bean.pm”。如果把Bean.pm移到./Coffee目錄,上面的例子將用這一use語句來工作。這樣的好處是有條理地組織類的代碼。再如,下面的語句:
use Another::Sub::Menu;
意味著如下子目錄樹:
./Another/Sub/Menu.pm

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

網站地圖xml | 網站地圖html
主站蜘蛛池模板: 济源市| 科尔| 金寨县| 巴彦淖尔市| 五华县| 瑞安市| 龙海市| 小金县| 旬阳县| 刚察县| 马关县| 浦北县| 弥勒县| 怀远县| 垣曲县| 定安县| 乐清市| 廉江市| 馆陶县| 郴州市| 广河县| 仪征市| 丁青县| 女性| 龙海市| 东海县| 噶尔县| 长顺县| 侯马市| 县级市| 彭阳县| 吐鲁番市| 南康市| 镶黄旗| 土默特左旗| 贺兰县| 黄陵县| 隆安县| 万载县| 宣化县| 沈丘县|