方法覆盖特定情况

时间:2018-01-06 20:56:40

标签: java oop inheritance override

我们说我有以下课程:

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"方法,它是父母的"谁"所谓的方法,但看起来它的孩子"谁"有效召唤的方法。

你能解释一下这种特殊行为吗?

附带问题:如果我想做我的行为(打电话给父母的方法),有可能吗?

1 个答案:

答案 0 :(得分:3)

info()正在调用who(),因为class Bar有自己的who()方法,因此调用此方法。在运行时,您有一个Bar实例,因此首先在此实例中查找每个方法,并且只有在实例没有该方法的情况下,才会调用父类"" (即该方法在父类中查找)。

您可以调试代码并亲自查看