JAvaメソッド書き換え(overriding)とメソッドリロード(overloading)の違い

4838 ワード

一、方法書き換え
サブクラスは書き換えることによって自分の継承する方法を隠すことができる.すなわち、サブクラスが親クラスのある方法を継承できる場合、サブクラスはこの方法を書き換える権利がある.書き換えるとき、方法の戻り値も形参も変えられない.つまり、ハウジングは変えられない.中のコアコードは書き直す.つまり、書き換えるこの方法の名前、パラメータの個数、パラメータのタイプは、親とまったく同じです.サブクラスがこのように定義する方法をサブクラス書き換えの方法と呼ぶ.
以下は間違いの例ですが、観察しやすいように3つのクラスを同じソースファイルに書きます.
package Test;
/**
 *   
 */
   class B {
	 int calc(int a,int b){
		return a + b;
	}

}
/**
 *   
 */
class C extends B{
	 double calc(int x,int y){   //   calc        int ,    double,       
		return x * y;            //  ,             ,       ,     
	}
}
  public class A{
	  public static void main(String[] args){
		  C c = new C();
		 System.out.println( c.calc(3, 4));
		  
	  }
	  
  }

書き換えの目的は、親から継承されたメソッドを非表示にすることであり、子はメソッドの書き換えによって親のステータスと動作を自分のステータスの良い動作に変更することができ、親のメソッドを使用しなければキーワードsuperを使用することができません.
書き換えの注意点:1、パラメータリストは書き換えられた方法と完全に同じでなければならない.
2、返却タイプも書き換え方法と全く同じでなければなりません.
3、アクセス権限は親クラスで書き換えられたメソッドのアクセス権限より低くてはならない.アクセス権限の順序:public protected friendly privateつまり、このメソッドの親クラスでのアクセス権限はpublicレベルであり、その子クラスの書き換え時のアクセス権限はpublicより低くてはならない
4、finalと宣言する方法は書き換えられない.
5、staticと宣言する方法も書き換えることはできませんが、再度宣言することができます.
6、子クラスと親クラスが同じパッケージにある場合、子クラスは親クラスのすべての方法を書き換えることができます.もちろん、上記の2つの特例のほかにprivateがあります.私有のものは継承できないので、書き換えることはできません.
7、子クラスと親クラスが同じパッケージにない場合、子クラスは親クラスのpublicとprotectedとして宣言されたメソッドのみを書き換えることができます.
8、構造方法も書き換えられない.
二、方法の重荷
メソッドのリロードは、1つのクラスに同じ名前を持つメソッドが複数存在してもよいが、これらのメソッドのパラメータは異なる必要があり、戻りタイプは同じでも異なってもよいという意味である.
メソッドの戻りタイプとパラメータの名前は比較に関与しません.つまり、2つのメソッドの名前が同じであれば、戻りタイプが異なるとしても、パラメータが異なることを保証しなければなりません.そうしないと、メソッドの再ロードではありません.
パラメータの違いには、1、パラメータの個数が異なる2、パラメータの個数が同じであるが、パラメータリストに対応するパラメータのタイプが異なる
**   **                 **    **               **    **

                                                          
    
                                                         

                                                            

まとめ:
メソッドリロード(overload)とメソッドリライト(overriding)はjavaの2つのマルチステートであり、リライトは親クラスと子クラスの間のマルチステートの表現であり、リロードはクラスのマルチステートの表現である.