overrideとoverloadの違い


文章を転載する
自動回転http://blog.csdn.net/gnuhpc/article/details/4890773
方法の書き換え(Overriding)とリロード(Overloading)はJava多形性の異なる表現である.    書き換え(Overriding)は、親と子の多形性の表現であり、オーバーロード(Overloading)は多形性の表現である.    サブクラスである方法を定義すると、親と同じ名前とパラメータがある場合、この方法は書き換えられます.  .この方法をサブクラスのオブジェクトに使用すると、サブクラスの定義を呼び出します.これに対して、親クラスの定義は「遮蔽」されたようです.  
一つのクラスで複数の同名の方法が定義されている場合、それらは異なるパラメータの個数または異なるパラメータの種類または異なるパラメータの順序がある場合、方法のオーバーロードと称される.アクセス権限、戻りタイプ、投げられた異常による再ロードはできません.  
1.Overrideの特徴    1、カバーする方法の標識はカバーされた方法の標識と完全に一致しなければなりません.カバーの効果を達成できません.    2、カバーする方法の戻り値はカバーされた方法の戻り値と一致しなければならない.    3、カバーする方法で投げられた異常はカバーされた方法の投げられた異常と一致しなければなりません.またはそのサブクラスです.    4、カバーされた方法はprvateではなく、そのサブクラスの中で新たに一つの方法を定義しただけで、上書きしていません.  
2.Overloadの特徴    1、リロードを使用する場合は、異なるパラメータスタイルしか通過できません.例えば、異なるパラメータタイプ、異なるパラメータ個数、異なるパラメータ順序(もちろん、同じ方法のいくつかのパラメータタイプは異なる必要があります.例えば、fun(int、float)であってもいいですが、fun(int、int)ではないです.    2、アクセス権限、戻りタイプ、投げ出しの異常によって再ロードできません.    3、方法の異常の種類と数は、重積載に影響を与えません.    4、継承にとって、もしある方法が親類の中でアクセス権限がpravteであるなら、サブクラスでそれを重載することはできません.定義すれば、新しい方法を定義しただけで、重積載の効果を達成することはできません.  
Overrride例      
class A{   
public int getVal(){   
   return(5);   
}   
}   
class B extends A{   
public int getVal(){   
   return(10);   
}   
}   
public class override {   
public static void main(String[] args) {   
   B b = new B();   
   A a= (A)b;//  b       A      
  
   int x=a.getVal();   //  10,            ( http://www.cnblogs.com/gnuhpc/archive/2013/01/04/2844093.html)
   System.out.println(x);   
}   
  
}   
  
Overloadの例   
  
package com.guonan;   
//Demostrate method voerloading.   
class OverloadDemo {   
void test(){   
   System.out.println("NO parameters");   
}   
void test(int a){   
   System.out.println("a:"+a);   
}//end of Overload test for one integer parameter.   
void test(int a, int b){   
   System.out.println("a and b:"+a+" "+b);   
     
}   
double test(double a){   
   System.out.println("double a:"+a);   
   return a*a;   
}   
}   
class Overload{   
public static void main(String[] args) {   
   OverloadDemo ob = new OverloadDemo();   
   double result;   
   ob.test();   
   ob.test(10);   
   ob.test(10, 20);   
   result = ob.test(123.25);   
   System.out.println("Result of ob.test(123.25):"+result);