next up previous
: オーバーライド : オブジェクト指向言語 Java : 継承

多重定義

同一クラスにおいて,同じ名前のメソッドを複数定義する場合,そのメソッドは 多重定義(overloading) されたという. 多重定義されたメソッドの区別は,その引数(の型) で行う. 例えば以下のプログラムを考える.
public class Operator {
  public boolean Plus(boolean A,boolean B) {
    return (A || B);
  }
  public int Plus(int A,int B) {
    return A+B;
  }
  public double Plus(double A,double B) {
    return A+B;
  }
  public String Plus(String A,String B) {
    return A+B;
  }
  public static void main(String args[]) {
    Operator a = new Operator();
    System.out.println("true+false="+
      (a.Plus(true,false)));
    System.out.println("1+2="+(a.Plus(1,2)));
    System.out.println("1.2+2.3="+
      (a.Plus(1.2,2.3)));
    System.out.println("\"I am \"+\"a student\"="+
      (a.Plus("I am ","a student")));
  }
}
このプログラムを実行すると,以下のようになる.
true+false=true
1+2=3
1.2+2.3=3.5
"I am "+"a student"=I am a student
クラス Operator の中にはメソッド Plus が複数定義されている ことがわかる.型 boolean int double Sring に対して Plus が定義されている.メソッド main では, メソッドを全て同じように a.Plus と呼出しているが, 引数の型に応じて呼出されるメソッドが異なっていることがわかる.

メソッド名は,演算子と捕らえることもできる.上の例の Plus がその 例である.一般に演算子は,型に左右されず複数の型に対して有効なことが多 いので,「常識」により近いという意味でも演算子を多重定義するとわか りやすい.Java ではできないが,C++ では「演算子の多重定義」が 提供されている.


平成12年8月9日