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例
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);