オーバーロードメソッドとオーバーライドメソッドの違いは何ですか?誰かがそれを例で説明できますか?
メソッドoverloadingは、同じクラスに同じ名前で異なる引数を持つ2つ以上のメソッドを持つという概念を扱います。
void foo(int a)
void foo(int a, float b)
メソッドオーバーライドは、引数が同じで実装が異なる2つのメソッドを持つことを意味します。それらの1つは親クラスに存在し、もう1つは派生クラスまたは子クラスに存在します。 @Override
アノテーションは必須ではありませんが、コンパイル時に メソッドを適切にオーバーライドする に役立ちます。
class Parent {
void foo(double d) {
// do something
}
}
class Child extends Parent {
@Override
void foo(double d){
// this method is overridden.
}
}
メソッドのオーバーライドは、子クラスが同じメソッドを親クラスと同じパラメーターで再定義する場合です。 たとえば、、標準のJavaクラスJava.util.LinkedHashSet
はJava.util.HashSet
を拡張します。メソッドadd()
はLinkedHashSet
でオーバーライドされます。タイプがHashSet
の変数があり、そのadd()
メソッドを呼び出す場合、HashSet
であるかどうかに基づいて、add()
の適切な実装を呼び出します。またはLinkedHashSet
。これはポリモーフィズムと呼ばれます。
メソッドのオーバーロードは、同じクラスで複数のメソッドを定義し、異なる数とタイプのパラメーターを受け入れます。この場合、呼び出される実際のメソッドは、引数の数と型に基づいてコンパイル時に決定されます。 instanceの場合、メソッドSystem.out.println()
はオーバーロードされるため、文字列だけでなくintも渡すことができ、異なるバージョンのメソッド。