我有一個父類。OOPS概念父類的調用函數不是子類
import java.util.HashMap;
import java.util.Map;
public class Parent {
Map<String,String> map = new HashMap<String, String>();
public void process(){
System.out.println("parent");
this.checkFunction();
}
protected void checkFunction(){
System.out.println("parentC");
System.out.println(map);
}
public void init(){
(map).put("parent","b");
}
}
現在,正如所料,我有一個孩子班。
import java.util.HashMap;
import java.util.Map;
public class Child extends Parent {
Map<String,String> map = new HashMap<String, String>();
public void checkFunction(){
System.out.println(map);
System.out.println("ChildC");
}
public void process(){
super.process();
System.out.println("Child");
}
public void init(){
super.init();
(map).put("child","b");
}
}
爲了測試我想要的,我有一個主類。
public class test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Child a = new Child();
a.init();
a.process();
Parent p = a;
p.checkFunction();
}
}
當我打電話a.process(),我認爲它應該叫child.process()將在返回調用super.process()。到現在爲止還挺好。在父進程()中,它應該調用checkFunction()。
現在,根據我的理解,它應該調用父類的checkFunction()。爲什麼它調用Child的checkFunction()?
我的輸出是這樣
parent
{child=b}
ChildC
Child
{child=b}
ChildC
我希望它是
parent
parentC
{parent=b}
Child
{child=b}
ChildC
調用'Child.checkFunction'是正確的。這是Java動態多態性的本質。調用'checkFunction'的目標對象是'Child'的一個實例,所以它的'checkFunction'的實現將被執行。 – 2011-05-14 01:18:53