多くの学生は愚かであり、過負荷とオーバーライドの違いを伝えることはできません。概念的な知識を暗記によって記憶するのではなく、それを理解して記憶することをお勧めします。
最初に私の定義を与えさせてください:
過負荷:同じクラスまたは継承関係で、同じ名前と異なるパラメーターを持つメソッドグループ。基本的に、それはさまざまな方法の名前です。
オーバーライド:継承関係を持つ2つのクラスの間に、親クラスに存在する方法がサブクラスに再定義されます。本質は、同じ方法に対して異なる実装を提供することです。
まず、オーバーロードの例を見てみましょう。
public class overloadparent {public string getPerson(string name){return "persona" + name; } public String getPerson(int age){return "personb"; } public string getPerson(String name、int age){return "personc"; } public void getPerson(string name){system.out.println( "method?"); }} Public Class OverloadChildExtents overloadParent {public void getPerson(double money){system.out.println( "Am I an an Overloaded Method"); }}観察に注意してください:
(1)オーバーロードパレントに同じ名前の4つの方法があります
(2)最初の3つの方法のパラメータータイプと数は一貫性がなく、返品値は同じであり、これは過負荷を構成します
(3)方法4および方法1のみの戻り値は異なり、過負荷を構成せず、コンパイラは通過しません。
PS:返品値はメソッド実行の結果です。メソッドを呼び出すと、「xxxタイプの返品値を持つメソッドを呼び出したい」と指定しません。メソッドオーバーロードの機能にはなりません。
(4)オーバーロードパレントはデモを継承し、デモで所有されているすべての方法があります。既存の方法はニーズを満たすことができないと感じたため、単にそれを過負荷にしました。
オーバーロードされたフラグ:メソッド名は同じで、パラメーターは異なり(数またはタイプ)、返品値とは何の関係もありません。
上書きの例を見てみましょう。
public class overrideParent {public void fly(){system.out.println( "ican fly!"); }} パブリッククラスのOverrideChildは、OverrideParent {@Override public void fly(){system.out.println( "ican't fly、でも実行できます!"); } public static vid main(string [] args){overwriteparent child = new rowritechild(); child.fly(); }}OverrideChildの主な方法を実行すると、何が出力されますか?
答えは次のとおりです。私はできませんが、実行できます!
わかります:
(1)オーバーライデチルドとオーバーライドペーレントには、FLYメソッドがあります
(2)フライの返品値と修飾子は同じであり、メソッドボディのみが異なります
(3)サブクラスのFLYメソッドの前に@OverWriteの注釈があります。 JDK1.5が表示され、クラスの継承にのみ使用されます。 1.6は、インターフェイスの実装に使用できます。この注釈はコンパイラのチェックに役立ち、追加しないでください。
オーバーライドされたフラグ:子供は親クラスを継承し、同じ方法で異なる実装を持っています。
アプリケーションシナリオ
過負荷:メソッド機能が類似しているが、異なるパラメーターを渡す必要がある場合。
オーバーライド:サブクラスに独自の動作がある場合、親クラスから継承し、独自のニーズを満たすことができません。
PS:過負荷と上書きは、両方とも多型の症状です。前者はコンパイラの多型であり、後者はランタイム多型です。
読んでくれてありがとう、私はそれがあなたを助けることができることを願っています。このサイトへのご支援ありがとうございます!