[#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スタティックメソッドには上書きメカニズムがありません.
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であり,ここでは多態機構とは異なり,静的メソッドのバインドも静的であり,参照がどのタイプであるか,どのタイプの静的メソッドを呼び出す.