2013-01-16 13 views
7

可能性の重複:C#で
Is there a ‘new’ modifier for methods in Java?C#の 'new'修飾子に相当するJavaはありますか?

、サブクラスのメソッドはmodified as newすることができます。

基本修飾子から継承したメンバーを明示的に非表示にするための新しい修飾子の1つの使用法。

Javaには同じキーワードがありますか?あなたは、基本クラスの非仮想関数をシャドウ/非表示にする新しいを使用するC#で

+5

短い答え:いいえ –

+2

おそらく、このような 'new'の使用はC#では避けるべきです。おそらく、再設計する方がいいでしょうか? – horgh

答えて

4

。仮想でない関数を上書きすることはできないため、C#ではこのキーワードが必要です。

Javaでは、すべての関数がデフォルトで仮想であるため、常に上書きすることができ、newなどのキーワードは必要ありません。

これが役に立ちます。

+1

(そして、誰かが行って最終的にメソッドを作成します。) –

2

C#では、ベースクローズからオーバーライドする方法は、abstract,virtualまたはoverrideである必要があります。新しいキーワードは実際にオーバーライドしません。

new-keywordで基本クラスの関数を隠す関数を宣言すると、この実装は、非常に同じ子タイプのオブジェクトがある場合にのみ使用されます。例:拡張クラスは親のClassType、オーバーライドにキャストされている場合は :これはになります

class TopClass 
    { 
     public String getHello() 
     { 
      return "Hello"; 
     } 

     public virtual String getWorld() 
     { 
      return "World"; 
     } 
    } 

    class ChildClass : TopClass 
    { 
     public new String getHello() 
     { 
      return "Hi"; 
     } 

     public override string getWorld() 
     { 
      return "Earth"; 
     } 
    } 

 TopClass tc = new TopClass(); 
     Console.WriteLine(tc.getHello() + " " + tc.getWorld()); // Hello World 

     ChildClass cc = new ChildClass(); 
     Console.WriteLine(cc.getHello() + " " + cc.getWorld()); // Hi Earth 

     TopClass tc2 = new ChildClass(); 
     Console.WriteLine(tc2.getHello() + " " + tc2.getWorld()); // Hello Earth 

     Console.ReadLine(); 

あなたは典型的なオーバーライドと比較して新しいキーワードの違いを見ることができます新しい機能はありませんが(Helloの代わりにHiは返されません)、関数(Worldの代わりにEarthを返す)は有効です。

+0

+1の例です。ベースクラスのメソッドについて知っておくと、ジェネリック(トップクラス)型にキャストするときに使用されます。 – Destrictor

関連する問題