Javaのリロード(overload)とオーバーライド(override)
3158 ワード
リロード(overload)
リロードは1つのクラスで、メソッドの名前は同じですが、コンテンツパラメータは異なり、戻りタイプは同じでも異なってもよく、その中で最もよく使われるのはコンストラクタのリロードです.
リロード規則
(1)リロードされる方法は、パラメータリスト(パラメータの個数またはタイプまたは順序が異なる)を変更しなければならない.
(2)リロードされる方法は、戻りタイプを変更することができる.
(3)リロードされた方法はアクセス修飾子を変更することができる.
(4)リロードされた方法は、新しいまたはより広い検査異常を宣言することができる.
(5)方法は、同じクラスにおいて、または1つのサブクラスにおいてリロードすることができる.
(6)リロード関数の区分基準として戻り値タイプを使用できない.
Javaでは、同じ名前の同じパラメータでも異なるタイプの値を返す方法はリロードではなく、コンパイルは通過できません.
コードの例
実行結果
test1
1
test2
test3
returntest3
test4
returntest4
オーバーライド(override)
オーバーライド(override)は、親クラスのパラメータが同じで、戻りタイプが同じ同じ同じ同じ名前のメソッドを定義します.戻り値とパラメータは変更できません.つまり、シェルは変更されません.コアは書き換えます.
上書きの利点は、サブクラスが必要に応じて、自分固有の動作を定義できることです.
メソッド上書きのルール:
(1)パラメータリストは、上書きされた方法と完全に同じでなければならない.
(2)戻りタイプは、上書きされたメソッドの戻りタイプと完全に同じでなければならない.
(3)親クラスで上書きされたメソッドよりもアクセス権限を低くすることはできない.たとえば、親クラスのメソッドがpublicとして宣言されている場合、サブクラスでメソッドを書き換えるとprotectedとして宣言できません.
(4)親クラスのメンバーメソッドは、その子クラスによってのみ上書きできます.
(5)finalと宣言する方法は上書きできない.
(6)staticと宣言する方法は上書きできないが,再宣言できる.
(7)子クラスと親クラスが同じパッケージにある場合、privateとfinalとして宣言されたメソッドを除いて、子クラスは親クラスのすべてのメソッドを上書きすることができる.
(8)サブクラスと親クラスが同じパッケージに含まれていない場合、サブクラスはpublicおよびprotectedと宣言された非finalメソッドのみを上書きすることができる.
(9)オーバーライド方法は、オーバーライドされた方法が異常を放出するかどうかにかかわらず、いかなる非強制異常も放出することができる.ただし、上書き方法は、新しい強制異常を投げ出すことができないか、上書き方法によって宣言されたよりも広範な強制異常を投げ出すことができず、逆に可能である.
(10)構造方法は書き換えられない.
(11)メソッドを継承できない場合は,このメソッドを書き換えることはできない.
コードの例
実行結果
4
China
リロードとオーバーライドの違い
区別点
じゅうか
オーバーライド(Override)
パラメータリスト
変更する必要があります
きっと修正できない
戻りタイプ
変更可能
きっと修正できない
異常
変更可能
減らしたり削除したりすることができて、きっと新しいあるいはもっと広い異常を投げ出すことができません
アクセス
変更可能
きっともっと厳しい制限はできない(制限を下げることができる)
リロードは1つのクラスで、メソッドの名前は同じですが、コンテンツパラメータは異なり、戻りタイプは同じでも異なってもよく、その中で最もよく使われるのはコンストラクタのリロードです.
リロード規則
(1)リロードされる方法は、パラメータリスト(パラメータの個数またはタイプまたは順序が異なる)を変更しなければならない.
(2)リロードされる方法は、戻りタイプを変更することができる.
(3)リロードされた方法はアクセス修飾子を変更することができる.
(4)リロードされた方法は、新しいまたはより広い検査異常を宣言することができる.
(5)方法は、同じクラスにおいて、または1つのサブクラスにおいてリロードすることができる.
(6)リロード関数の区分基準として戻り値タイプを使用できない.
Javaでは、同じ名前の同じパラメータでも異なるタイプの値を返す方法はリロードではなく、コンパイルは通過できません.
コードの例
public class Overloading {
public int test(){
System.out.println("test1");
return 1;
}
public void test(int a){
System.out.println("test2");
}
//
public String test(int a,String s){
System.out.println("test3");
return "returntest3";
}
public String test(String s,int a){
System.out.println("test4");
return "returntest4";
}
public static void main(String[] args){
Overloading o = new Overloading();
System.out.println(o.test());
o.test(1);
System.out.println(o.test(1,"test3"));
System.out.println(o.test("test4",1));
}
}
実行結果
test1
1
test2
test3
returntest3
test4
returntest4
オーバーライド(override)
オーバーライド(override)は、親クラスのパラメータが同じで、戻りタイプが同じ同じ同じ同じ名前のメソッドを定義します.戻り値とパラメータは変更できません.つまり、シェルは変更されません.コアは書き換えます.
上書きの利点は、サブクラスが必要に応じて、自分固有の動作を定義できることです.
メソッド上書きのルール:
(1)パラメータリストは、上書きされた方法と完全に同じでなければならない.
(2)戻りタイプは、上書きされたメソッドの戻りタイプと完全に同じでなければならない.
(3)親クラスで上書きされたメソッドよりもアクセス権限を低くすることはできない.たとえば、親クラスのメソッドがpublicとして宣言されている場合、サブクラスでメソッドを書き換えるとprotectedとして宣言できません.
(4)親クラスのメンバーメソッドは、その子クラスによってのみ上書きできます.
(5)finalと宣言する方法は上書きできない.
(6)staticと宣言する方法は上書きできないが,再宣言できる.
(7)子クラスと親クラスが同じパッケージにある場合、privateとfinalとして宣言されたメソッドを除いて、子クラスは親クラスのすべてのメソッドを上書きすることができる.
(8)サブクラスと親クラスが同じパッケージに含まれていない場合、サブクラスはpublicおよびprotectedと宣言された非finalメソッドのみを上書きすることができる.
(9)オーバーライド方法は、オーバーライドされた方法が異常を放出するかどうかにかかわらず、いかなる非強制異常も放出することができる.ただし、上書き方法は、新しい強制異常を投げ出すことができないか、上書き方法によって宣言されたよりも広範な強制異常を投げ出すことができず、逆に可能である.
(10)構造方法は書き換えられない.
(11)メソッドを継承できない場合は,このメソッドを書き換えることはできない.
コードの例
class Parent {
public int getscore(){
return 3;
}
public String getCountryName(){
return "China";
}
}
class Son extends Parent{
public int getCore(){
return 4;
}
}
public class RunSon{
public static void main(String args[]){
Son s=new Son();
System.out.println(s.getCore());
System.out.println(s.getCountryName());
}
}
実行結果
4
China
リロードとオーバーライドの違い
区別点
じゅうか
オーバーライド(Override)
パラメータリスト
変更する必要があります
きっと修正できない
戻りタイプ
変更可能
きっと修正できない
異常
変更可能
減らしたり削除したりすることができて、きっと新しいあるいはもっと広い異常を投げ出すことができません
アクセス
変更可能
きっともっと厳しい制限はできない(制限を下げることができる)