Perl中的多级继承

问题描述:

我有一个与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

如果你需要这样做,那么你已经错误地定义了你的类。

third类继承自second类。 second有它自己的定义disp,所以它从来没有试图从它的超类first继承该方法。这意味着third得到在second

定义的实现简单的答案是要致电first::disp别的东西。这样second不会有方法的定义,如果你解释潜在的问题继承将再次调用

,为什么要忽略继承的方法,那么也许我们可以帮你找到一个更好的办法

也请注意,封装和模块文件应以大写字母开始,每个班通常是在它自己的文件,因此你通常会在First.pm

+0

只是试图找到一种方法,我可以使用第三个包的对象访问第一个包中的disp方法。 –

+1

@ s.patra:我意识到这一点,但你能解释*为什么*。这些软件包是你写的东西,还是你从别的地方得到的?如果我能看到真实的代码,这将有所帮助。 – Borodin

+0

我想在我的框架中实现这个概念,这将不可能在这里发布。所以我只写了一段代码来验证它是如何工作的。 –

$obj->first::disp()使用package First,但你是什么要求做的事情是你绝对不应该做的。修复你的设计。