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
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
留言
張貼留言