1

1)次のものが互いにオーバーロードもオーバーライドもできないのはなぜですか:

void meth(List<Integer> a){}
 void meth(List<String> a){}  

上記のパラメーターが同じタイプの消去になる場合、それらをオーバーライドできないのはなぜですか。
それらをオーバーライドできない場合、それはパラメーターが何らかの形で異なることを意味するため、同じクラスにある場合はオーバーロードされますが、そうではありません.上記は競合ではありませんか??

2)オーバーライドで次の動作が示されるのはなぜですか?

a)void test(int a){}  //parent class method  
public/protected void test(int a){}  //child class method  (Overridden)



 b)void test(int a){}  //parent class method  
private void test(int a){}  //child class method (not overridden)  


c)public test(int a){}  //parent class method  
 protected void test(int a){}  //child class method (not overridden)  
4

2 に答える 2

3

1- IN Java - ジェネリックは消去によって実装されます。これは、両方のバージョンの実際の署名が評価されることを意味します。

void meth(List a){}

明らかに、同じクラス定義に正確なシグネチャを持つ 2 つのメソッドを含めることはできません。

2. を指定した場合、最初の例を除いて、すべての例でコンパイル時エラーが発生しますpublic

于 2012-09-11T12:41:59.513 に答える
1

1)。空のリストまたは null のリストでは、どのメソッドを呼び出すかを定義することが不可能になるため、それらをオーバーロードすることはできません。これらは署名が異なり、制限されているため、オーバーライドできません。

2)。子メソッドは親メソッドよりも可視性が低く、言語仕様により、可視性が低いため、できません。

于 2012-09-11T12:42:46.097 に答える