2011年6月14日 星期二

Java使用多形時可能犯的錯誤

1.覆寫 private method

import static net.mindview.util.Print.*;

public class PrivateOverride{
    private void f(){  print("private f()"); }
    public static void main(String[] args){
        privateOverride po = new Derived();
        po.f();
    }
}

class Derived extends PrivateOverride{
    public void f(){  print("public f()"); }
}
//output:private f()

private method會自動成為final,也會被derived class遮蔽
例子中的Derived的f()是新的method

2.fields及static methods

物件只有一般的method可以是多形
假如base class 與 derived class 有相同的data member
derived class實際上包含了兩個同名的field,其中一個是繼承而來的
只是要呼叫base class的field就必須使用 super.field 的形式來取得
不過在實務上幾乎不會發生,將fields都宣告為private而不直接存取才是避免混淆的方法

static methos是伴隨著物件,而非個別的objects

沒有留言:

張貼留言