Javaでは、何をオーバーライドしている?オーバーロードとは何ですか?
著者:ZJ 07-3-13
ブログ
:[URL] http://zhangjunhd.blog.51cto.com/ [/ URL]
1.Overriding
訳さオーバーライド「リライト/カバー。」これは、この方法で覆い、異なる効果を達成するためにそれらを書き換えています。私たちにとって、最も身近なインターフェイスメソッドのカバレッジを達成することである、一般的なインタフェースは、メソッドのちょうど声明で、我々は実現するとき、私たちは、インタフェースの実装で宣言されたすべてのメソッドを必要としています。この典型的な使用に加えて、我々はまた、継承では、サブクラスで親クラスのメソッドをカバーすることができます。
主な機能は書き直されています。
1)メソッド名が書き換え方法と一致していなければなりません。
2)メソッドのパラメータリストは、書き換え方法と一致していなければなりません。
3)戻り型は、同じ方法で上書きされなければなりません。
4)この方法は、元のメソッドの「可視性」を書き換える低減することができません。
例:メソッドを保護、ボイドそうであるように書き換えられる(int型I、ダブルD)、メソッドは、void DO保護されたオーバーライドできます(int型I、ダブルD)、または公共のボイドDO(int型I、ダブルD)ではなく、プライベート無効DO(int型I、ダブルd)があります。
5)新しい例外または「広い」の例外をスローすることはできません。
例:メソッドは、公共のボイドDO(intはI、ダブルd)はIOExceptionがスローとして書き換えられ、公共のボイドDOを無効にすることができる方法(int型I、ダブルd)はIOExceptionを、または公共のボイドDOスロー(int型I、ダブルD)例外のIOExceptionの親クラスは、IOExceptionがより「広い」で、ddeeException(IOExceptionをサブクラス)をスローしますが、(int型I、ダブルD)公共無効DOない例外がスローされます。
6)この方法は、プライベート、またはサブクラスで覆うことができないその唯一の新しい方法を定義し、上書きされません。
2.Overloading
訳さ、オーバーロード「過負荷」。これは、VMがパターンコールを実行するための適切な方法を選択するために、様々なパラメータに依存します場合、我々は、異なる入力方式を区別するためのパラメータを定義することによって、方法の同じ名前のいくつかを定義し、できることを意味します。
その特徴は以下のとおりです。
1)オーバーロードされたそれぞれのメソッド名と一致します。
2)パラメータのリストは、パラメータの種類を含む各オーバーロードメソッド(パラメータの数、パラメータの順序三つ以上)のために同じではありません。
3)任意の戻り値の型。(戻り値がオーバーロードされたメソッドの方法によって区別することができません。)
4)すべてのアクセス指定子。(オーバーロードされたメソッドを区別するためのアクセス方法はできません。)
5)にかかわらず、オーバーロードされるメソッドの、例外自体を投げることができます。(オーバーロードされたメソッドを区別するために例外をスローすることはできません。)
オーバーロードの手段は、「彼らは異なる数またはパラメータの種類、したがって、異なるシグネチャを持っている場合、2つ以上の方法は、同じ名前を持つことができます。」明らかに、唯一の要件は、オーバーロードされている引数リストを変更しなければならない、そうでない場合は、オーバーロードされていません。
3. 型変換のオーバーロード
いくつかのケースでは、Javaの自動型変換はまた、引数のオーバーロードメソッドに適用されます。たとえば、次のプログラムを考えてみます。
//自動型変換がオーバーロードに適用されます。
クラス
OverloadDemo {
ボイド
試験(){
システム。
アウト
.println( "いいえパラメータ");
}
2つの整数パラメータのための//過負荷試験。
ボイド
試験(
int型
、
int型
B){
システム。
アウト
( "及びB" + A + "" + B).println。
}
二重のパラメータに//過負荷試験
ボイド
試験(
ダブル
A){
システム。
アウト
.println( "インサイドテスト(ダブル):" + A)。
}
}
クラス
過負荷{
パブリック
静的
ボイド
メイン(文字列引数[]){
OverloadDemo OB =
新しい
OverloadDemo();
int型
私は88を=。
ob.test();
ob.test(10、20)。
(i)はob.test。//これはテストを起動します(ダブル)
(123.2)ob.test。//これはテストを起動します(ダブル)
}
}
|
プログラムは次の出力を生成します。
パラメータいいえ
およびB:10 20
内部テスト(ダブル):88
インサイドテスト(ダブル):123.2
およびB:10 20
内部テスト(ダブル):88
インサイドテスト(ダブル):123.2
本実施例では、このバージョンはOverloadDemo試験(int)を定義していません。従って、過負荷にテープテスト()と呼ばれる整数パラメータを、そのマッチング方法を見つけることができません。しかし、Javaは自動的に二重の整数型に変換することができ、この変換は、この問題を解決することができます。テスト(int型)を見つけることができない後したがって、Javaは私はdouble型に拡張され、その後の試験(二重)を呼び出します。もちろん、もしテスト(int型)の定義、テスト(ダブル)を呼び出すことなく、コースのテスト(int型)の最初の呼び出し。場合にのみ、正確に一致するが、Javaの自動変換では動作しませんが、最善の方法のパラメータの型「一致」は常に引数よりもその仮パラメータ「ビッグ」ことがわかり、最も「近い」です。
オペレーティングシステムのチュートリアルhttps://www.cnblogs.com/awzh2020/p/12513557.html
https://www.cnblogs.com/awzh2020/p/12513483.html
https://www.cnblogs.com/awzh2020/p/12496324.html
https://www.cnblogs.com/awzh2020/p/12496174.html
https://www.cnblogs.com/awzh2020/p/12489362.html