0

戻り値の型は関数のオーバーロードでは何の役割も果たさず、コンパイラは呼び出し時に使用されるコードの部分のみの一意の存在をチェックするだけなので..

次に、このコードにエラーが含まれていないのはなぜですか

class Temp{
  Temp(){
    System.out.println("Default Constructor");
  }
  void Temp(){
    S.o.p("HEll"); 
  }
  public static void main(String a[]){
    new Temp();
  }
}

Output=Default コンストラクター...// コンパイラーは呼び出し時に使用されるコードの部分のみをチェックするため、COMPILE TIME ERROR がないことにショックを受けました。つまり、コンパイラーは Temp() の一意の存在のみをチェックする必要があり、 Temp() のユニークな存在。

詳しく教えてください

4

6 に答える 6

2

はメソッドであるためvoid Temp()、インスタンスで呼び出す必要があります。クラスの名前でメソッドを宣言することは許可されていますが、呼び出しは異なります。コンストラクターのみをnew演算子で呼び出すことができます。

コンストラクターの詳細については、JLS#8.8 を参照してください。コンストラクタ宣言

コンストラクターは、メソッド呼び出し式によって呼び出されることはありません (§15.12)。

ここで注意すべき主な違いは、コンストラクターには戻り値の型がなく、オーバーロードの定義には戻り値の型が含まれていることです。

于 2012-10-12T18:37:19.600 に答える
1

コンストラクターは戻り値の型を必要とせず、コンストラクターではなくvoid Temp()メソッドとして扱われます。

を呼び出すとvoid Temp();、引数のないコンストラクターが呼び出されます。

于 2012-10-12T18:37:48.693 に答える
1

1 つはコンストラクターで、もう 1 つはコンストラクターではありません。

于 2012-10-12T18:38:24.350 に答える
1

コンパイラは、キーワードを使用してメソッドとコンストラクターの呼び出しを区別しnewます。newキーワードの後に​​指定できるのはコンストラクターのみです。

于 2012-10-12T18:38:43.843 に答える
0

クラス、メソッド、およびフィールドは、異なる名前空間に存在します。コンパイラは常にどの構造が使用されているかを判断でき、new Temp()(クラス) とo.Temp()(メソッド) およびo.Temp(フィールド) を簡単に区別できます。

于 2012-10-12T18:42:57.203 に答える
0

Eclipse を使用すると、この使用法を避けることができます。

上の行を参照してください 「適用」ボタンの上の行を参照してください

于 2012-10-12T18:46:00.090 に答える