Java-リライトとリロードの違い

8484 ワード

文書ディレクトリ
  • 前言
  • 問題
  • 解答
  • 書き直しは何ですか?
  • 両同両小一大
  • 特性
  • の重荷は何ですか?
  • 同じ違い
  • なぜですか?
  • 特性
  • 書き換えとリロードの違いは何ですか?
  • なぜ比較するのですか?
  • 小結
  • 前言
    Javaの基础知识について、多くの内容は熟知していてよく知られていないので、いつもその时は理解していたような気がしますが、しばらくしてから分かち合う时は言叶が通じなくて、この知识に対する理解がまだ不十分であることを说明して、今日わざわざ记录しました.
    に質問
    書き直しは何ですか.  2、重荷は何ですか.  3、重荷と書き換えの違いは何ですか.  4、なぜ2つを比較するのですか?
    に答える
    書き直しは何ですか.
      子クラスに親と同名のメソッドが含まれる現象をメソッド書き換え(Override)と呼び、メソッドオーバーライドとも呼ばれる.具体的には、子クラスは親と同名のメソッドのメソッド体を書き換えるが、メソッド名、パラメータリスト、戻りタイプは変わらない.
    親:Birdクラス
    public class Bird
    {
    	// Bird  fly  
    	public void fly(){
    		System.out.println("           ……");
    	}
    }
    

    サブクラス:Ostrichクラス
    public class Ostrich extends Bird
    {
    	//   Bird  fly  
    	public void fly(){
    		System.out.println("        ……");
    	}
    	public static void main(String[] args){
    		//   Ostrich  
    		Ostrich os = new Ostrich();
    		//   Ostrich   fly  ,   “        ……”
    		os.fly();
    	}
    }
    

    上のプログラムを実行するとosが表示されます.fly()実行時にBirdクラスのメソッドを実行するのではなく、Ostrichクラスのfly()メソッドを実行します.
    二つは同じで二つは小さくて一つは大きい.
    メソッドの書き換えは、「2つの小さなものと大きなもの」のルールに従います.
  • 両同:メソッド名は同じ、パラメータリストは同じ
  • 両小:子メソッド戻り値タイプは親メソッド戻り値タイプより小さいか等しい
  • サブクラスメソッド宣言放出された例外クラスは、親メソッド宣言放出された例外クラスよりも小さいまたは等しい
  • であるべきである.
  • 大きい:サブクラスメソッドのアクセス権は、親メソッドのアクセス権よりも大きい、または等しい
  • である必要があります.
    とくせい
    親と子の間の多様性.つまり、子でメソッドを書き換える方法です.同じメソッド名、同じパラメータ、異なる実装(実行時の多様性).子が親メソッドを上書きすると、子のオブジェクトは親で上書きされたメソッドにアクセスできませんが、子メソッドで親で上書きされたメソッドを呼び出すことができます.-superを使用して解決します.
    重荷は何ですか.
    Javaでは、パラメータリストが異なる限り、同じクラスで複数の同名メソッドを定義できます.同じクラスに2つ以上のメソッドが含まれているメソッド名が同じですが、パラメータリストが異なる場合は、メソッドリロードと呼ばれます.
    public class Overload
    {
    	//       test()  ,          
    	public void test(){
    		System.out.println("   ");
    	}
    	public void test(String msg){
    		System.out.println("   test  " + msg);
    	}
    	public static void main(String[] args){
    		Overload ol = new Overload();
    		//   test()       ,             test()  
    		ol.test();
    		//   test()           
    		//                  test()  
    		ol.test("abc");
    	}
    }
    

    同じものと違う
  • 両同:同じクラスのメソッド名が同じ
  • 異なる:パラメータリストが異なる
  • 他の部分については、例えばメソッド戻りタイプなど、区別メソッドとして再ロードできないメソッド
    どうしてですか.
      int f(){}とvoid f(){}の2つのメソッドが呼び出された場合:
    int result = f();
    

      システムは、どのメソッドが呼び出されたかを知っていますが、Javaでメソッドを呼び出す場合は、メソッドの戻り値を省略できます.つまり、このように呼び出されます.
    f();
    

      このようにすると,いったいどのメソッドが呼び出されたのか,人間がまだ区別できないのか,システムがどのように呼び出されたのかを判断できるのか.
    とくせい
      リロードOverloadはクラス内のマルチステートの表現です.同じメソッド名、異なるパラメータのリスト(コンパイル時のマルチステート)
    書き換えとリロードの違いは何ですか?
    ジルコニウムメソッドのリロードと書き換えはいずれも多態性の一種であり,前者はコンパイル時多態性,後者は実行時多態性である.  リロードは同じクラスで発生し、メソッド名が同じで、パラメータリストが異なることが要求されます.リロードは戻りタイプに特別な要件はなく、戻りタイプによって区別できません.  書き換えは親子関係を持つクラスで発生し,メソッド名が同じ,パラメータが同じ,具体的な実装が異なることが要求される.また、上記の詳細については、戻りタイプおよび例外投げ出しおよびアクセス権限に制限があります.
    どうして比較するの?
    両者自体はあまり比較的意味がなく,両者とも方法間で発生し,方法名が同じであることを要求する以外に,あまり類似点はない.しかし、多態の観点から考えると、私たちが推敲する価値のある内容もあります.
    小結
    もちろん、親メソッドと子メソッドの間にもリロードが発生する可能性があります.子メソッドは親メソッドを取得します.子メソッドが親メソッドと同じメソッド名を定義している場合、パラメータリストの異なるメソッドでは、親メソッドと子メソッドの間のメソッドリロードが発生します.
    参考記事:Java-書き換えとリロードの違い
    狂ったJava講義第4版
    お読みいただきありがとうございます~~