[#0 x 005]overload and override:リロードと上書き
1465 ワード
overload:リロードとは、同じclassに複数の同名functionがある現象を指す.override:上書きとは、ext classでbase classの同署名functionを書き換える行為を指す.ただし、ext classがbase classを継承している場合、base classのprivate以外のfinalのwork(arg list 1)メソッドであるext classにもwork(arg list 1)メソッドがあると仮定します.
このときext classにwork(arg list 2)のような同名functionを追加すると、リロード動作になります.
同署名function、すなわちwork(arg list 1)を追加すると、上書き動作となります.メソッド名は、パラメータリストに一致するメソッド署名であり、メソッドの一意の識別である.return typeはメソッド署名に属しません.(3月27日補足:それでも、上書きはreturn typeに要求があり、more details see[#0 x 000 A])
base classのwork(arg list 1)メソッドがprivateまたはfinalの場合、ext classにはwork(arg list 1)メソッドはありませんので、work(arg list 1)メソッドを追加してもwork(arg list 2)メソッドでも、リロードでも上書きでもありません.
P.S.リロードは継承を要求するものではなく、同一クラスにおいてもリロード行為があってもよい
P.S.2スタティックメソッドには上書きメカニズムがありません.
特に注意すべきはb 2であり,ここでは多態機構とは異なり,静的メソッドのバインドも静的であり,参照がどのタイプであるか,どのタイプの静的メソッドを呼び出す.
このときext classにwork(arg list 2)のような同名functionを追加すると、リロード動作になります.
同署名function、すなわちwork(arg list 1)を追加すると、上書き動作となります.メソッド名は、パラメータリストに一致するメソッド署名であり、メソッドの一意の識別である.return typeはメソッド署名に属しません.(3月27日補足:それでも、上書きはreturn typeに要求があり、more details see[#0 x 000 A])
base classのwork(arg list 1)メソッドがprivateまたはfinalの場合、ext classにはwork(arg list 1)メソッドはありませんので、work(arg list 1)メソッドを追加してもwork(arg list 2)メソッドでも、リロードでも上書きでもありません.
P.S.リロードは継承を要求するものではなく、同一クラスにおいてもリロード行為があってもよい
P.S.2スタティックメソッドには上書きメカニズムがありません.
class Base {
public static void print() {
System.out.println("Base prints.");
}
}
public class Ext extends Base {
public static void print() {
System.out.println("Ext prints.");
}
public static void main(String[] args) {
Base.print(); // Base prints.
Ext.print(); // Ext prints.
Base b = new Base();
b.print(); // Base prints.
Base b2 = new Ext();
b2.print(); // Base prints.
Ext e = new Ext();
e.print(); // Ext prints.
}
}
特に注意すべきはb 2であり,ここでは多態機構とは異なり,静的メソッドのバインドも静的であり,参照がどのタイプであるか,どのタイプの静的メソッドを呼び出す.