Perl中的多级继承

时间:2016-11-24 18:38:29

标签: perl oop inheritance

我有一个与Perl中的多级继承有关的问题。

这是我的代码

mod.pm

XMLDecriptato = New MemoryStream()
Using stream_readerX As New StreamReader(XMLDecriptato, System.Text.Encoding.UTF8)

    Dim FStreamCrypted As FileStream = File.Open(OpenFileDialog1.FileName, FileMode.Open, FileAccess.Read)
    CryptStream(Pass, FStreamCrypted, XMLDecriptato, CryptType.Decrypt, True) 'True = Leave the underlying stream open.

    XMLDecriptato.Seek(0, SeekOrigin.Begin) 'Reset the MemoryStream's position.

    Dim xDocumentX As New XmlDocument()
    xDocumentX.Load(stream_readerX)
End Using

prog.pl

FStreamCrypted.Seek(0, SeekOrigin.Begin)

我有一个包含三个类的.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; 方法。我不确定那是怎么回事。

我尝试使用两种方式访问​​:

  1. 使用class name =>第一:: DISP()
  2. 在第二个包装内使用SUPER disp方法=> $自> SUPER :: DISP();
  3. 但我不确定如何使用第三类对象直接访问它。

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

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

third类继承自second类。 second有自己对disp的定义,因此它永远不会尝试从其超类first继承该方法。这意味着third获得second

中定义的实现

简单的答案是将first::disp称为其他内容。那样second将没有方法的定义,并且将再次调用继承

如果您解释了潜在的问题,以及为什么要忽略继承的方法,那么也许我们可以帮助您找到更好的方法

另请注意,包和模块文件应以大写字母开头,每个类通常都在自己的文件中,因此您通常会在package First等中使用First.pm