[Perl] クラス継承のこと

Posted by
ぴろり
Posted at
2011/01/29 23:27
Trackbacks
関連記事 (0)
Post Comment
コメントできます
Category
開発メモ カテゴリ

 Perl でクラスを作って、継承した時の関数のオーバーライドとか。

この記事を Delicious に追加する   このエントリーをはてなブックマークに追加  

ソースコード

package Foo; ########

sub new {
    my $class = shift;
    print 'Foo::new - ', $class, "
";
    bless {}, $class;
}

sub func {
    my $self = shift;
    print 'Foo::func - ', ref $self, "
";
}

package Bar; ########
use base 'Foo';

package Baz; ########
use base 'Bar';

sub func {
    my $self = shift;
    $self->SUPER::func;
    print 'Baz::func - ', ref $self, "
";
}

package main; ########
print __LINE__, "
"; Foo->new->func();
print __LINE__, "
"; Bar->new->func();
print __LINE__, "
"; Baz->new->func();

実行結果

27
# Foo インスタンスが生成されて
Foo::new - Foo
# Foo::func が呼ばれる
Foo::func - Foo

28
# 自分は Bar だけれど、親の Foo:new で Bar インスタンスが生成されて
Foo::new - Bar
# Bar では func を定義(オーバーライド)していないので、Foo::func が呼ばれる
Foo::func - Bar

29
Foo::new - Baz
# Baz の親クラス(Bar)の func を呼び出したら、Bar ではオーバーライドしていなかったので、
# 親をすっとばしてお爺ちゃん(Foo:::func)が呼ばれる
Foo::func - Baz
Baz::func - Baz

 参考にした モダンPerlの世界へようこそ:第2回 mro:次のメソッドはどこ? では、多重継承にまで話題が広がっていますが、まずは基本的なところから。C++ を使っていた頃でも、継承しまくりなクラスに出くわしたことがないので、案外平和な OOP ライフを送ってこれたのかも。しかし、最近全く C++ を触らなくなってしまったので、継承とか完全に忘れてるっぽいなぁ…(´д`;)

この記事を Delicious に追加する   このエントリーをはてなブックマークに追加  


この記事のアーカイブ

全ての記事 »
2011年
全てのカテゴリ »
電算室 » 開発メモ
全てのタグ »
,

関連記事/トラックバック

関連記事/トラックバックはまだありません

この記事にトラックバックを送るには?

コメントを投稿する

 
 (必須, 匿名可, 公開, トリップが使えます)
 (必須, 匿名可, 非公開, Gravatar に対応しています)
 (必須)
スパム コメント防止のため「投稿確認」欄に ランダムな数字 CAPTCHAについて を入力してから送信してください。お手数ですがご協力のほど宜しくお願いいたします。