ホームページ >Java >&#&チュートリアル >Javaのオーバーロードとオーバーライドの詳細な説明と例
多くの学生がオーバーロードとオーバーライドについて混乱しています。概念的な知識を丸暗記するのではなく、理解して暗記することをお勧めします。
まず私の定義をさせてください:
オーバーロード: 同じクラスまたは継承関係のあるクラス内で、同じ名前と異なるパラメーターを持つメソッドのグループ。エッセンスはさまざまなメソッドに付けられた名前です。
オーバーライド: 継承関係のある 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(“我是重载的方法吗?”); } }
public class OverloadChildextends OverloadParent { public void getPerson(double money){ Sytem.out.println(“我是重载的方法吗”); } }
注意:
(1) OverloadParent には同じ名前のメソッドが 4 つあります
(2) 最初の 3 つのメソッドのパラメーターの型と数は矛盾しており、戻り値は一貫しており、オーバーロードを構成します
(3) メソッド 4 とメソッド 1 は戻り値が異なるだけであり、これはオーバーロードを構成せず、コンパイラーはそれを渡しません。
メソッドを呼び出すときに、「戻り値が xxx であるメソッドを呼び出したい」という指定はメソッドのオーバーロードの機能にはなりません。
(4) OverloadParent は Demo を継承し、Demo 内のすべてのメソッドを持ちます。既存の方法ではニーズを満たすことができないと感じたため、単純に過負荷になっていました。
オーバーロードのフラグ: メソッド名は同じですが、パラメーターは異なります (数値または型)。戻り値とは関係がありません。
オーバーライドの例を見てみましょう:
public class OverrideParent{ public void fly(){ System.out.println(“Ican fly!”); } }
public class OverrideChild extends OverrideParent{ @override public void fly(){ System.out.println(“Ican't fly, but I can run!”); }
public static vid main(String[] args){ OverwriteParent child= new OverwriteChild(); child.fly(); } }
OverrideChild の main メソッドが実行されると何が出力されるでしょうか?
答えは次のとおりです: 飛ぶことはできませんが、走ることはできます!
わかります:
(1) OverrideChild と OverrideParent の両方に fly メソッドがあります
(2) fly の戻り値と修飾子は同じです。メソッド本体のみが異なります
(3) サブクラスの fly メソッドの前に @overwrite アノテーションがあります。これは jdk1.5 で使用され、クラスの継承にのみ使用されます。1.6 はインターフェイスの実装に使用できます。このアノテーションはコンパイラのチェックに役立ち、省略できます。
オーバーライドフラグ: 子は親クラスを継承し、同じメソッドの異なる実装を持ちます。
アプリケーション シナリオ
オーバーロード: メソッドに同様の機能があるが、異なるパラメーターを渡す必要がある場合。类
: サブクラスには独自の動作があり、親クラスの継承では独自のニーズを満たすことができません。
PS: オーバーロードと上書きはどちらもポリモーフィズムの現れです。前者はコンパイラポリモーフィズム、後者はランタイムポリモーフィズムです。読んでいただきありがとうございます。皆さんのお役に立てれば幸いです。このサイトへのサポートに感謝します。
🎜 Java のオーバーロードとオーバーライドの詳細な説明と例については、PHP 中国語 Web サイトに注目してください。 🎜