多くの学生は愚かであり、過負荷とオーバーライドの違いを伝えることはできません。概念的な知識を暗記によって記憶するのではなく、それを理解して記憶することをお勧めします。
最初に私の定義を与えさせてください:
まず、:オーバーロードについて話しましょう
(1)メソッドオーバーロードは、クラスが異なるタイプのデータを統一された方法で処理できるようにする手段です。同じ名前の複数の関数が同時に存在し、異なるパラメーター/タイプを使用します。過負荷は、クラスの多型の現れです。
(2)Javaメソッドオーバーロードは、クラスで複数のメソッドを作成できることを意味し、同じ名前を持っていますが、異なるパラメーターと異なる定義を持っています。メソッドを呼び出すとき、それらに渡された異なるパラメーターとパラメータータイプの数で使用する方法を決定します。これは多型です。
(3)オーバーロードの場合、メソッド名は同じでなければなりませんが、パラメーターのタイプと数値は異なり、戻り値タイプは同じまたは異なる場合があります。返品タイプは、関数を過負荷にするための区別基準として使用することはできません。
まず、オーバーロードの例を見てみましょう。
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 overloadChildExtends overloadParent {public void getPerson(double money){system.out.println( "is a an an an an and method"); }}観察に注意してください:
(1)オーバーロードパレントに同じ名前の4つの方法があります
(2)最初の3つの方法のパラメータータイプと数は一貫性がなく、返品値は同じであり、これは過負荷を構成します
(3)方法4および方法1のみの戻り値は異なり、過負荷を構成せず、コンパイラは通過しません。
PS:返品値はメソッド実行の結果です。メソッドを呼び出すと、「xxxタイプの返品値を持つメソッドを呼び出したい」と指定しません。メソッドオーバーロードの機能にはなりません。
(4)オーバーロードパレントはデモを継承し、デモで所有されているすべての方法があります。既存の方法はニーズを満たすことができないと感じたため、単にそれを過負荷にしました。
オーバーロードされたフラグ:メソッド名は同じで、パラメーターは異なり(数またはタイプ)、返品値とは何の関係もありません。
次に、オーバーライド(オーバーライド)について話しましょう
(1)親クラスと子クラスの間の多型は、親クラスの機能を再定義します。サブクラスで定義されているメソッドの親クラスと同じ名前とパラメーターがある場合、この方法はオーバーライドしていると言います。 Javaでは、サブクラスは同じ方法を書き換えることなく、親クラスからメソッドを継承できます。
しかし、サブクラスは、親クラスの方法をそのまま継承したくない場合がありますが、メソッドの書き換えが必要な特定の変更を行いたい場合があります。
メソッドの書き換えは、メソッド上書きとも呼ばれます。
(2)サブクラスのメソッドが同じメソッド名、親クラスのメソッドと同じメソッド名、返品タイプ、パラメーターテーブルの場合、新しい方法は元のメソッドをオーバーライドします。
親クラスで元のメソッドが必要な場合は、現在のクラスの親クラスを指すスーパーキーワードを使用できます。
(3)サブクラス関数のアクセス修正権限は、親クラスのアクセス許可よりも小さいことはできません。
上書きの例を見てみましょう。
public class overrideParent {public void fly(){system.out.println( "ican fly!"); }} public class overrideChildはOverrideParent {@Override public void fly(){system.out.println( "ican't fly、しかしrun!"); } public static vid main(string [] args){overwriteparent child = new overwritechild(); child.fly(); }}OverrideChildの主な方法を実行すると、何が出力されますか?
答えは次のとおりです。私はできませんが、実行できます!
わかります:
(1)オーバーライデチルドとオーバーライドペーレントには、FLYメソッドがあります
(2)フライの返品値と修飾子は同じであり、メソッドボディのみが異なります
(3)サブクラスのFLYメソッドの前に@OverWriteの注釈があります。 JDK1.5が表示され、クラスの継承にのみ使用されます。 1.6は、インターフェイスの実装に使用できます。この注釈はコンパイラのチェックに役立ち、追加しないでください。
オーバーライドされたフラグ:子供は親クラスを継承し、同じ方法で異なる実装を持っています。
アプリケーションシナリオ
過負荷:メソッド機能が類似しているが、異なるパラメーターを渡す必要がある場合。
オーバーライド:サブクラスに独自の動作がある場合、親クラスから継承し、独自のニーズを満たすことができません。
PS:過負荷と上書きは、両方とも多型の症状です。前者はコンパイラの多型であり、後者はランタイム多型です。
書き換え方法のルール:
1.パラメーターリストは、書き換えられているメソッドとまったく同じでなければなりません。そうしないと、書き換えと呼ぶことはできませんが、過負荷になります。
2。返されたタイプは、常に上書きメソッドの返品タイプと同じでなければなりません。そうしないと、書き換えと呼ぶことはできませんが、過負荷になります。
3.アクセス修飾子の制限は、書き換えられた方法のアクセス修飾子よりも大きくなければなりません(public> protected> default> private)
4.書き換えメソッドは、新しいチェックの例外や、書き換えメソッド宣言よりも広くチェックされた例外をスローしてはなりません。例えば:
親クラスの方法は、IOExceptionチェック例外を宣言します。この方法を書き換えるとき、例外をスローすることはできません。IoExceptionのサブクラス例外のみを投げることができ、非チェックの例外をスローできます。
過負荷のルール:
1.異なるパラメーターリストが必要です。
2。パラメーターリストが異なる限り、あなたをoldっないで、scりないリターンタイプがあります。
3.さまざまなアクセス修飾子があります。
4。異なる例外をスローできます。
書き換えと過負荷の違いは次のとおりです。
ポリモーフィズムの書き換えは、過負荷の方法を呼び出すと、コードの入力量を大幅に減らすことができます。同じメソッド名が異なるパラメーターを渡す限り、異なる関数または戻り値を持つことができます。
書き換えと過負荷をうまく使用する場合は、明確で簡潔な構造のクラスを設計できます。コードを作成するプロセスでの書き換えと過負荷の役割は並外れていると言えます。
上記はこの記事のすべての内容です。私はそれがすべての人の学習に役立つことを願っています、そして、私は誰もがwulin.comをもっとサポートすることを願っています。