- 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疑似クラスの使用は問題ありません。
Perlゼミ

