我们说我有以下课程:
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&#34的foo信息;
实际输出:"我和我提供关于x&#34的foo信息;
据我所知,super()引用了父对象,所以我希望当super.info()调用" who"方法,它是父母的"谁"所谓的方法,但看起来它的孩子"谁"有效召唤的方法。
你能解释一下这种特殊行为吗?
附带问题:如果我想做我的行为(打电话给父母的方法),有可能吗?
答案 0 :(得分:3)
info()
正在调用who()
,因为class Bar
有自己的who()
方法,因此调用此方法。在运行时,您有一个Bar
实例,因此首先在此实例中查找每个方法,并且只有在实例没有该方法的情况下,才会调用父类"" (即该方法在父类中查找)。
您可以调试代码并亲自查看