1. Perl
  2. オブジェクト指向プログラミング
  3. here

SUPER疑似クラス - スーパークラスのメソッドの呼び出し

SUPER疑似クラスを使うと、スーパークラスのメソッドを呼び出すことができます。

package Point;

sub move {
  my ($self, $x, $y) = @_;
  
  $self->{x} += $x;
  $self->{y} += $y;
}

package Point3D;

use base 'Point';

sub move {
  my ($self, $x, $y, $z) = @_;
  
  # スーパークラスのメソッドの呼び出し
  $self->SUPER::clear($x, $y);
  
  $self->{z} += $z;
}

$self->SUPER::clear($x, $y)で、現在のパッケージである「Point3D」のスーパークラスのclearメソッドを探索します。

Pointクラスのclearメソッドが見つかり、これが呼び出されます。

SUPER疑似クラスの注意点

SUPER疑似クラスの注意点として、メソッドの探索順序があります。

デフォルトでは、Perl はメソッドに対して深さ優先左から右探索を行います。 つまり、@ISA 配列の最初の親から始め、それからその全ての親、祖父母、 というように探索します。 メソッドを見つけることに失敗すると、元のクラスの @ISA 配列の 次の親に行き、そこから探索します。

メソッド解決順序 - perlobj

単一継承のみを使っている場合は、SUPER疑似クラスの使用は問題ありません。

業務に役立つPerl

Perlテキスト処理のエッセンス 書籍版

関連情報