gpt4 book ai didi

java - 方法覆盖特定情况

转载 作者:行者123 更新时间:2023-11-29 04:22:42 25 4
gpt4 key购买 nike

假设我有以下类(class):

public class Foo {

public Foo()
{}

public String who() {
return "I'm foo ";
}

public String info() {
return who() + "and i provide foo infos";
}

public static void main(String[] args)
{
Foo bar = new Bar();
System.out.println(bar.info());
}
}

public class Bar extends Foo {

public Bar() {
super();
}

public String who(){
return "I'm bar ";
}

public String info(){
return super.info() + " about x";
}
}

预期输出:“我是 foo,我提供关于 x 的 foo 信息”

真实输出:“我是 bar,我提供关于 x 的 foo 信息”

据我所知,super() 指的是父对象,所以我希望当 super.info() 调用“who”方法时,调用的是父对象的“who”方法,但它出现有效调用的是子“who”方法。

你能给我解释一下这个特殊的行为吗?

附带问题:如果我想做我的行为(调用父方法),这可能吗?

最佳答案

info() 正在调用 who(),因为 class Bar 有自己的 who()方法,这个叫做。在运行时,你有一个 Bar 实例,所以首先在这个实例中查找每个方法,只有当实例没有该方法时,才会“调用”父类(即该方法是查看父类)。

可以调试代码自己看

关于java - 方法覆盖特定情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48131841/

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