第十二章 物件 下

2021-07-24 21:40:01 字數 3026 閱讀 2623

第十二章 物件(下)

12.5.1 通過 @isa 繼承

package mule;

our @isa= ("horse", "donkey");

perl 將首先在horse 裡(和他的任何前輩類裡,比如critter)查詢任何在mule裡找不到的方法,

找不到以後才繼續在donkey 和其父類裡進行查詢。

如果缺失的方法在乙個基類裡發現,perl內部把該位置快取到當前類裡,依次提高效率,

當 perl 搜尋乙個方法的時候,它確信你沒有建立乙個閉環的繼承級別。如果兩個類互相 繼承則可能出現這個問

題vsftp:/root/perl/9# perl a1.pl

recursive inheritance detected in package 'horse' at critter.pm line 2.

compilation failed in require at a1.pl line 3.

begin failed--compilation aborted at a1.pl line 3.

使用use base 宣告父類:

vsftp:/root/perl/9# cat horse.pm

package horse;

use base ("critter");

sub new ;

return bless $self, $class;

};sub sum_arr ;

1;vsftp:/root/perl/9# cat critter.pm

package critter;

sub new ;

my $invocant = shift;

my $class = ref($invocant) || $invocant;

my ($name)=@_;

my $self = ;

bless $self, $class; # use class name to bless() reference

return $self;

};sub sum ;

1;vsftp:/root/perl/9# cat a1.pl

unshift(@inc,"/root/perl/9");

use horse;;

use critter;

use data::dumper;

$ed = horse->new; # 四腿灣馬

print $ed->sum_arr(4,5);

print "\n";

print $ed->sum(4,5);

print "\n";

vsftp:/root/perl/9# perl a1.pl 169

12.5.2 訪問被覆蓋的方法:

基類就是父類:

vsftp:/root/perl/9# cat horse.pm

package horse;

use base ("critter");

sub new ;

return bless $self, $class;

};sub sum ;

1;vsftp:/root/perl/9# cat critter.pm

package critter;

sub new ;

my $invocant = shift;

my $class = ref($invocant) || $invocant;

my ($name)=@_;

my $self = ;

bless $self, $class; # use class name to bless() reference

return $self;

};sub sum ;

1;vsftp:/root/perl/9# cat a1.pl

unshift(@inc,"/root/perl/9");

use horse;;

use critter;

use data::dumper;

$ed = horse->new; # 四腿灣馬

#print $ed->sum_arr(4,5);

print "\n";

print $ed->sum(4,5);

print "\n";

vsftp:/root/perl/9# perl a1.pl

16此時horse 類覆蓋了基類critter的 sum方法

vsftp:/root/perl/9# cat a1.pl

unshift(@inc,"/root/perl/9");

use horse;;

use critter;

use data::dumper;

$ed = horse->new; # 四腿灣馬

print $ed->critter::sum(4,5);

print "\n";

print $ed->sum(4,5);

print "\n";

vsftp:/root/perl/9# perl a1.pl 916

呼叫父類critter::sum sum的方法

vsftp:/root/perl/9# cat a1.pl

unshift(@inc,"/root/perl/9");

use horse;;

use critter;

use base qw(critter);

use data::dumper;

$ed = horse->new; # 四腿灣馬

print $ed->super::sum(4,5);

print "\n";

print $ed->sum(4,5);

print "\n";

vsftp:/root/perl/9# perl a1.pl 916

12.5.3 universal:最終的祖先類

12.5.4 方法自動裝載

12.5.5 私有方法

第十二章 類和物件

類是多個類似事務組成的群體的統稱,能夠幫助我們快速理解和判斷事務的性質面向過程 物件導向 區別 面向過程 事務比較簡單,可以用線性的思維去解決,親力親為 物件導向 事務比較複雜,用簡單的線性思維無法解決 共同點 面向過程和物件導向都是解決實際問題的一種思維方式 總結 物件導向和面向過程相輔相成,二者...

第十二章 檔案

文字檔案 文字檔案是一種由若干字元構成的檔案,可以用文字編輯器進行閱讀或編輯。以txt py html等為字尾的檔案都是文字檔案。2.二進位制檔案 二進位制檔案一般是指不能用文字編輯器閱讀或編輯的檔案。以 mp4 png等為字尾的檔案都是二進位制檔案,如果想要開啟或修改這些檔案,必須通過特定軟體進行...

第十二章 dp

動態規劃策略 將原始問題拆分為多個子問題,將子問題結果記錄,方便復用子問題的解 遞迴 記憶化 遞推 是動態規劃的一體兩面,本質都是一樣的 遞推減少了呼叫次數,空間上還能優化,一般選擇遞推方式 遞迴 記憶化 int memo maxn 將o 2 n o n intfibonacci int n 遞推 ...