ということは
これはJavaの仕様に、同じ名前のメソッドとして作る必要がないよね?と言われているわけだ。つまり、昨日の話で言うならば、NodeListはList型として抽象化して使う必要は無いよね、ということになる。
つまり、NodeListをListとして使わないということになるわけだが、ここで少し考えてみる。継承の目的とはなんだろうか。一つは上でも書いたように抽象化である。そしてこの理由は否定された。
しかしながら、メソッドをそのまま使うことが出来る、と言う点においての継承は否定されていないのだ。もしこれがPerlであれば、ラッパークラスは以下のようにするだろう。
package NodeList; use LinkedList; sub new{ my $cls = shift; my $this = {}; $this->{list} = LinkedList->new(); bless $this, $cls; return $this; } sub AUTOLOAD{ my $this = shift; (my $method = $AUTOLOAD) =~ s/.*://g; $this->{list}->$method(@_); }
Excellent!
つまり、機能として使えるものは全て使えると言うこの美しさ。まあ、スクリプト言語でないJavaには無理な芸当ですが。
Decoratorパターンって言うらしいですね。
http://naoya.dyndns.org/~naoya/mt/archives/000892.html
が参考になりました。