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();
}
}