gpt4 book ai didi

java - OOPS概念调用父类而不是子类的函数

转载 作者:搜寻专家 更新时间:2023-11-01 02:32:24 24 4
gpt4 key购买 nike

我有一个父类。

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 的 process() 中,它应该调用 checkFunction()。

现在,根据我的理解,它应该调用父类的 checkFunction()。为什么调用 Child 的 checkFunction()?

我的输出是这样的

parent
{child=b}
ChildC
Child
{child=b}
ChildC

我希望它是

parent
parentC
{parent=b}
Child
{child=b}
ChildC

最佳答案

这是因为您在子类中覆盖了 checkFunction。因此,即使调用来自父类,child 的实例也会调用子 checkFunction。

如果您想从子类的实例中调用父类检查函数,您需要在子类中调用 super.checkFunction()。 super 关键字实质上“向上移动”了继承链。

关于 super 关键字的详细说明可以引用here

关于java - OOPS概念调用父类而不是子类的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5999212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com