2012-09-11 16 views
39

オーバーロードメソッドとオーバーライドの違いは何ですか?誰もそれを例で説明することはできますか?メソッドのオーバーロードとオーバーライドの違いは何ですか?

+13

調査を行ったことはありますか?もしそうなら、あなたは混乱しているトピックのどの部分ですか? – kosa

+11

これは重複している可能性がありますが、確かに非常に基本的ですが、実際の質問でもあります。それはあいまいでも、あいまいでも、広範囲でも、修辞的でもなく、OOPの基本的な把握を持つ誰でも、現在の形で非常に簡単に答えることができます。人々はなぜ、彼らはあまりにも基本的だと思う質問を閉じますか?これは、RTFMと同じようなものです。 – iconoclast

答えて

123

メソッドオーバーロードは、同じ名前であるが異なる引数を持つ同じクラスに2つ以上のメソッドを持つという概念を扱います。

void foo(int a) 
void foo(int a, float b) 

方法同じ引数が、異なる実装で2つのメソッドを有する手段をオーバーライドします。そのうちの1つは親クラスに存在し、別のクラスは派生クラスまたは子クラスに存在します。 @Overrideアノテーションは、必須ではありませんが、コンパイル時にenforce proper overriding of a methodに役立ちます。

class Parent { 
    void foo(double d) { 
     // do something 
    } 
} 

class Child extends Parent { 

    @Override 
    void foo(double d){ 
     // this method is overridden. 
    } 
} 
+24

'@ Override'は必要ありません。それは良い習慣ですが、必須ではありません。 – GriffeyDog

+6

申し訳ありません@GriffeyDog。あなたは正しいです@オーバーライドは強制的ではありません。しかし、あなたはメソッドをオーバーライドしていることを覚えておいてください。それは良い練習です..思い出させるためにありがとうございます.. –

+5

オーバーロードは同じクラスにある必要はありませんが、クラスと派生クラス。 – happs

33

をオーバーライドする方法は、子クラスが同じメソッドを親クラスと同じパラメータで再定義する場合です。 たとえば、の場合、標準Javaクラスjava.util.LinkedHashSetjava.util.HashSetに拡張されます。メソッドadd()は、LinkedHashSetに上書きされます。変数がHashSetであり、そのadd()メソッドを呼び出すと、かLinkedHashSetかに基づいて、add()の適切な実装が呼び出されます。これを多型といいます。

メソッドオーバーロードは、同じクラス内で、異なる数と種類のパラメータを受け入れるいくつかのメソッドを定義しています。この場合、呼び出される実際のメソッドは、引数の数と型に基づいてコンパイル時に決定されます。 たとえばの場合、メソッドSystem.out.println()はオーバーロードされているため、intとStringを渡すことができます。メソッドの別のバージョンが呼び出されます。

+3

異なるパラメータで同じメソッドを定義する子クラスがある場合は、オーバーライドとオーバーロードの両方であると見なされますか? – barlop

+4

それは親メソッドのどれもオーバーライドしていないので、オーバーロードしています。 –

関連する問題