У меня есть родительский класс.
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 (). Все идет нормально. В методе Parent () он должен вызывать checkFunction ().
Теперь, насколько я понимаю, он должен вызывать checkFunction () класса Parent. Почему это вызывает Child's checkFunction ()?
Мой вывод выглядит примерно так
parent
{child=b}
ChildC
Child
{child=b}
ChildC
Я ожидаю, что это будет
parent
parentC
{parent=b}
Child
{child=b}
ChildC