Javaにおける方法の重載と方法の書き換えの違いの詳細と例

2846 ワード

方法の荷重:同じクラスでも、パラメータのリストが異なります(パラメータの数が異なり、パラメータの種類が異なり、パラメータの順序が異なります)。例えば、次のコードは方法の再ロードの違いです。
//           
	public void eat(){ 
		System.out.println("    ");
	}
	//    
	public void eat(String food) throws Exception{
		System.out.println("    :" + food);
	} 
	//    
	void eat(String food,String space){
		System.out.println("   "+space+",    "+ food);
	}
	//       
	public int eat(int num ,String food){
		System.out.println("     :"+ num +"  "+ food);
		return 20;
	}
	//             
	public void eat(String food,int num){
		System.out.println("     :"+ num +"  "+ food);
	}
上のコードの例から見ても分かります。
  • 方法で、方法の戻り値とは関係ありません。
  • 方法で、方法の修飾子を載せても大丈夫です。
  • 方法での積載や方法の異常はなくても大丈夫です。
  • 方法で、リロードと方法パラメータ名も関係ありません。
    例えば、下記のコードはエラーとなります。
    	//    
    	public void eat(String food) throws Exception{
    		System.out.println("    :" + food);
    	}
         /*                ,              
    	public void eat(String chide){
    	}*/
    
    理由は方法の重さと方法のパラメータ名は関係がないので、コンパイラはこの二つの方法が同じだと思います。だからエラーが発生します。では、方法を積み重ねるとどんなメリットがありますか?
  • 開発者は、メソッド名の定義を減らすことができます。
  • 方法の再負荷は、一定の多形効果をもたらすことができる(同じ方法を起動すると、異なる結果が生じる)

  • では、書き換えの方法は何ですか?方法書き換え:方法書き換えとは、相続関係において、父類の方法名と子父類の方法名が一致しているか、あるいは子類の方法修繕子が親類の修繕子より大きい場合、子類の方法は親類の方法を書き直したということです。方法書き換えの場合、サブクラスの戻り値タイプは親タイプの戻り値タイプと一致しています。または、サブタイプの戻り値タイプは親タイプの戻り値タイプのサブクラスです。これもまた、書き換え方法です。例えば、次のコードです。まず、動物類を親類と定義します。コードは以下の通りです。
    public void eat(){
    		System.out.println("     ");
    	}
    	protected  void run(){ 
    	}
    	private void jump(){	
    	}
    	public Animal getObj(){
    		return null;
    	}
    
    次に、サブクラスの犬を定義し、上の動物類を継承します。コードは以下の通りです。
    //         
    	@Override
    	public void eat(){
    		System.out.println("sss");  //      ,    ,          
    	}
    	@Override
    	protected void run(){  //    ,    ,          
    	}
    	@Override
    	public void run(){  //    ,    ,                 
    	}
    	@Override
    	public Dog getObj(){ //    ,    ,                       
    		return null;
    	} 
    	public void jump(){ 	 //     ,               ,      。
    	}
    
    上のコードから、私達は分かりやすくないです。
  • 父類における私有方法は書き換えられません。父類の私有属性と方法は継承されないため、書き換えられません。
  • 書き換え方法において、アクセス権限は以下のものではない。
  • 親方法が静的方法を使用する場合、サブクラスも静的方法
  • を使用しなければならない。
    では、書き直しにはどのような特徴がありますか?
  • サブクラスと親タイプのメソッド名が異なると、それぞれの対応方法が異なります。
  • 方法を書き換えると、メソッド名が同じであれば、サブクラスを使用する。
  • 方法書き換えの応用:子類は父類の機能が必要で、機能体主体は自分特有の機能がある場合、父類の中の方法を書き換えることができます。このように、父類の機能を踏襲することができますし、また、サブクラスに特有の方法を定義しました。
    以上のように、私達はめったに方法を出しません。
  • 方法書き換えは、相続関係において、サブクラスの方法署名と親類の一致が必要である(アクセス修飾子が親タイプアクセス修飾子以上で、戻り値タイプは親タイプと同じか、親タイプのリターン値タイプのサブクラスか、方法名が一致していて、パラメータリストが一致している)。パラメータの名称は関係なく、タイプだけと関係がある
  • 方法でのリロードは、同じクラスでなければなりません。パラメータリストが異なり、リターン値とは関係なく、アクセス識別子とは関係がありません。パラメータの名前とは関係がありません。
  • コンストラクタは引き継げません。構造方法も書き換えられません。構造方法は
  • を積載することができます。