frei

旧「anney's room」からブログ「frei」だけ引っ越し&残しました

オーバーロード。

今日の学校ー。

毎度、perlPHPに比較して

Javaならではっ」な部分(?)を

自信度23%程の、弱弱しい信用性で書いておりますが(^_^;

今回は「オーバーロード」でございます。

はて、オーバーロード

同じ名前の関数を作っても、

引き数が、ちょいと違えば違う振る舞いをしてくださるそうで。

そういう関数を定義する事、だそうです。

引き数が違う…とは、引き数の数もそうだけど

引き数のデータ型が違うだけでも、勿論OK。

で、この「引き数の数やデータ型」を

シグニチャと呼ぶそうです。へぇー。

public class Test() {

  public static void main( String[] args ) {

    showText( "あいうえお" );

    showText( 12345 );

  }

  static void showText( String text ) {

    System.out.println( "引き数はStringの" + text + "なんですよ" );

  }

  static void showText( int num ) {

    System.out.println( "引き数はintの" + num + "なんですね" );

  }

}

上記の例だと、showText という関数が2つあるんだけど

それぞれの引き数のデータ型が違うので、

エラーになったり、どちらかが上書きされたり…という事にならず

どっちも使えるようになる、と。

で、main の中で呼ぶ際に、showText の引き数に

String(あいうえお)を与えてやると、前者が実行され、

int(12345)を与えてやると、後者が実行される、と。

ははぁー、便利ぃー♪

そんでもって。

PHPでも、何やらこの言葉は耳にするようなんですが。

果たしてこれを、同じオーバーロードと呼んでいいのか?

と思うくらいなのであります。

→参照:Do You PHP?

って訳で、試しにPHPで書いてみたけど

案の定、エラーが出てしまうのでした。

Fatal error: Cannot redeclare 関数名() in ...

一方、perlも、そんなの見た事ないような…と思いつつも

Effective Perl」を見てみたら、P.209には…

Perlでは、メソッドは非常にシンプルにオーバーロードできる。

…と書いてある。へぇー。

しかし、実際にperlで書いてみると、

エラーは出ないけど、構文チェックすると案の定、

Subroutine 関数名 redefined at ...

…と表示されて、結局、シグニチャに応じてうんぬん…という

概念に当てはまらない。

そういう訳で、どちらも

オーバーロードじゃなくて、オーバーライドなんじゃないの?」

てな事らしいです???…ようわからんけど(笑)

あ、そうそう。

ところで、Java習ってると、

関数じゃなくて、メソッドってやたら言ってるんですけど

関数って呼んじゃいけないのかしら???

おまけ。

蚊帳の外かと思われそうなMacですが。

ちゃんと Mac OS上でも Eclipse が動くのだそうな。

おまけに Tomcatまでも!いやぁー、すんばらしい。

MacOSXでカンタンJava! J2SESDK,Eclipse,Tomcatのインストール