オーバーロード

クラスには同じ名前のメソッドを複数個定義することができます。
これをオーバーロードといいます。
ただ、まったく同じメソッドは定義できません。
ある条件を満たさなければいけません。

オーバーロードできる条件

各メソッドの引数の型・個数が異なること


   method(int x)
  method(double d)
  method(int x, double d)

サンプルプログラム(Sample44.java)

class Sample44{
    public static void main(String args[]){

     Sub44 obj = new Sub44();
obj.method(); obj.method(10); obj.method(20.5);
} } class Sub44{ void method(){ System.out.println("引数なしのメソッドです"); System.out.println("--------------------"); } int method(int x){ System.out.println("引数はint 型のメソッドです"); System.out.println("int x = " + x); System.out.println("--------------------"); return x; } void method(double d){ System.out.println("引数はdouble 型のメソッドです"); System.out.println("double d =" + d);
} }

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

コンパイル・実行してみます。

このように、引数なしのメソッドと引数int型のメソッドと引数double型のメソッド
をオーバーロードしたサンプルプログラムです。
このように引数の型や個数が異なればメソッド名は同じでもいいのです。

オーバーロードは似たような処理を行う複数のメソッドの名前を統一することで、
プログラムをシンプルにすることができます。

ためしに、今度はメソッドの引数が同じ場合のサンプルプログラムを見ていきます。

サンプルプログラム(Sample44_1.java)

class Sample44_1{
    public static void main(String args[]){

  Sub44_1 obj = new Sub44_1();
obj.method(); obj.method(10); obj.method(15);
} } class Sub44_1{ void method(){ System.out.println("引数なしのメソッドです"); System.out.println("--------------------"); } void method(int x){ System.out.println("引数はint 型のメソッドです"); System.out.println("int x = " + x); System.out.println("--------------------"); } void method(int y){ System.out.println("引数はint 型のメソッドです"); System.out.println("int y =" + y);
} }

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

マルチドメイン対応、ビジネス仕様 高性能レンタルサーバー 【シックスコア】
1890円〜100GBの大容量。無制限レンタルサーバー【X2】


コンパイル・実行してみます。

これだとエラーになります。
このことよりSample44_1.javaではint 型の変数にx と y を 指定しました。
でも、引数がともにint型なのでエラーになります。

では今度はSample44_1.javaを少しだけ変えてみたいと思います。

サンプルプログラム(Sample44_2.java)

class Sample44_2{
    public static void main(String args[]){
 Sub44_2 obj = new Sub44_2();
      obj.method();
      obj.method(10);
      obj.method(15);

    }

}


class Sub44_2{

  void method(){
        System.out.println("引数なしのメソッドです");
        System.out.println("--------------------");
  }

  void method(int x){
        System.out.println("引数はint 型のメソッドです");
        System.out.println("int x = " + x);
        System.out.println("--------------------");

  }

   void method(int y,double d){
       System.out.println("引数はint  型と double 型のメソッドです");
       System.out.println("int  y =" + y );
       System.out.println("double d = " + d);
  }

}

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

コンパイル・実行したいと思います。

今度は3番目のメソッドの引数を void method(int y,double d)に変えてみました。
無事にコンパイル・実行できました。
しかし 実行結果を見ると int 型の値が 10 と 15の2回呼び出されています。
それは、呼び出し元のSample44.javaで 

obj.method(10);
obj.method(15);

とint 型の引数を持っているメソッドを呼び出しているからです。
では、またSample44_2.javaを書き換えてみましょう

サンプルプログラム(Sample44_3.java)

class Sample44_3{
    public static void main(String args[]){

     Sub44_3 obj = new Sub44_3();

      obj.method();
      obj.method(10);
      obj.method(15,20.5);
} } class Sub44_3{ void method(){ System.out.println("引数なしのメソッドです"); System.out.println("--------------------"); } void method(int x){ System.out.println("引数はint 型のメソッドです"); System.out.println("int x = " + x); System.out.println("--------------------"); } void method(int y,double d){ System.out.println("引数はint 型と double 型のメソッドです"); System.out.println("int y =" + y ); System.out.println("double d = " + d); } }

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

フレッツ光加入で最大70,000円分の商品券プレゼント
★☆★☆★☆ ナウでヤングなレンタルサーバー!ロリポップ! ☆★☆★☆★
月額105円〜容量最大30GB!WordpressやMovable Typeの簡単インストール付★


コンパイル・実行したいと思います。

今度はSample44_3.javaのほうで、obj.method(15,20.5)と int 型 と double 型
の引数の指定してやりました。

したがって、3番目のmethod(int y,double d)が呼び出されてこのような結果になります。
いろいろなサンプルプログラムを作成しました。
これで、オーバーロードは理解できたと思います。

ページのトップへ戻る