- Perl ›
- オブジェクト指向プログラミング ›
- 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 配列の 次の親に行き、そこから探索します。
単一継承のみを使っている場合は、SUPER疑似クラスの使用は問題ありません。