2016-11-24 93 views
3

我有一個與Perl中的多級繼承有關的問題。Perl中的多級繼承

這裏是我的代碼

mod.pm

package first; 

sub disp { 
    print "INSIDE FIRST\n"; 
} 

package second; 
@ISA = qw(first); 

sub disp { 
    print "INSIDE SECOND\n"; 
} 

package third; 
@ISA = qw(second); 

sub new { 
    $class = shift; 
    $ref = {}; 
    bless $ref, $class; 
    return $ref; 
} 

sub show { 
    $self = shift; 
    print "INSIDE THIRD\n"; 
} 

1; 

prog.pl

use mod; 

$obj = third->new(); 
$obj->show(); 
$obj->disp(); 

我有一個包含三個班的.pm文件。我想使用第三類的對象訪問第一個類中的disp方法。我不確定這可以如何工作。

我試圖使用兩種方式來訪問:

  1. 使用類名=>第一:: DISP()
  2. 使用SUPER內第二封裝DISP方法=> $自我> SUPER :: DISP( );

但我不知道如何直接訪問使用第三類的對象。

+0

你爲什麼要這麼做? – simbabque

回答

3

如果你需要這樣做,那麼你已經錯誤地定義了你的類。

third類繼承自second類。 second有它自己的定義disp,所以它從來沒有試圖從它的超類first繼承該方法。這意味着third得到在second

定義的實現簡單的答案是要致電first::disp別的東西。這樣second不會有方法的定義,如果你解釋潛在的問題繼承將再次調用

,爲什麼要忽略繼承的方法,那麼也許我們可以幫你找到一個更好的辦法

也請注意,封裝和模塊文件應以大寫字母開始,每個班通常是在它自己的文件,因此你通常會在First.pm

+0

只是試圖找到一種方法,我可以使用第三個包的對象訪問第一個包中的disp方法。 –

+1

@ s.patra:我意識到這一點,但你能解釋*爲什麼*。這些軟件包是你寫的東西,還是你從別的地方得到的?如果我能看到真實的代碼,這將有所幫助。 – Borodin

+0

我想在我的框架中實現這個概念,這將不可能在這裏發佈。所以我只寫了一段代碼來驗證它是如何工作的。 –

5

$obj->first::disp()使用package First,但你是什麼要求做的事情是你絕對不應該做的。修復你的設計。