<<4.クラスの基礎の目次
オーバーロード
問題3(難易度:2)                             2004年11月12日
次の(*)の位置に追加できるメソッドを、下から選びなさい。

  public class A {
          public int foo(int x, int y) {
                  return x + y;
          }     
      (*) 
  }

       
        A. public int foo(int a, int b) {
                 return a - b;
           }
        
        B. private int foo(double x) {
                   return (int)x;
           }
        
        C. int foo(String s) {
                   return s.length();
           }
        
        D. public double foo(int x, int y) {
                 return x / (double)y;
           }
        
        E. void foo() {
           }
解説
 追加するメソッドは、既にあるメソッドと同じ名前fooばかりです。これはオーバーロードの問題ですね。

 オーバーロードは、同名のメソッドでも、引数の型と個数がちがえば、別のメソッドと見なされることを利用しています。既存のfooはint型の引数がふたつあります。よって選択肢の中の、int型の引数二つのメソッドは、既存のfooと同一と見なされるので追加できません。AとDが該当します。
 Aは引数の名前が異なりますが、これは本質的なことではありません。またDは戻り値がdoubleですが、戻り値がちがうだけでは、だめです。(なぜなら呼ぶときに、どのメソッドかわからなければならないのです。つまり実引数のリストを見てどれを呼ぶか判断しなければならないからです。)
 正解はAとD以外です。


解答 B C E

参考 読み物Java 第11章 似て非なるもの
<<4.クラスの基礎の目次次問題>>
Copyright (c) 2004 Nagi Imai All Rights Reserved..