北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

SUPER

package Class1;
sub new{bless {}, shift}
sub hello{print "Hello Class1.\n"}

package Class2;
@ISA = 'Class1';
sub hello{print "Hello Class2.\n"}
sub say_hello{
my $self = shift;
$self->hello();
$self->SUPER::hello();
}

package Class3;
@ISA = 'Class2';
sub hello{print "Hello Class3.\n"}

package main;
Class3->new->say_hello();






このコードで何が出力されるだろう?



つまり、SUPERで呼ばれるのはどれかと言う話。昔からよく、SUPERはメッセージを送るオブジェクトに対するスーパークラスだと勘違いしてしまうのだが、あくまでも現在のパッケージのスーパークラスなんだよねー。



でもって、こういう場合の$selfに対する親のメソッドを呼ぶ方法はあるのかな〜??

[2005.12.05]

javaでもやってみたけど、結果は一緒だね。この程度、スクラッチから書けるかと思ったら、mainのpublicとstaticの宣言をすっかり失念してたorz。




class Class1{
void hello(){
System.out.println("Hello Class1");
}
}

class Class2 extends Class1{
void hello(){
System.out.println("Hello Class2");
}
void say_hello(){
this.hello();
super.hello();
}

}

class Class3 extends Class2{
void hello(){
System.out.println("Hello Class3");
}

void main(String argv[]){
Class3 class3 = new Class3();
class3.say_hello();
}

}