在java中,如果我从子类调用一个调用重写方法的超类方法,将调用哪个类'方法?

时间:2013-07-17 21:00:28

标签: java inheritance override

说我有这个超级班:

public class MySuperClass {

protected void MyPrMethod() {
        //Do...
    }

    public void MyPuMethod() {
        MyPrMethod();
    }
}

和这个子类:

public class MySubClass extends MeSuperClass {
    public MySubClass() {}

    @Override protected void MyPrMethod() {
        //Do this instead...
    }
}

然后进入main:

MySubClass mySubClass = new MySubClass ();
mySubClass.MyPuMethod();

MyPrMethod将mySubClass.MyPuMethod()调用哪个?

编辑:我已经三次投票了。我现在不能尝试,因为我不在家,虽然现在知道答案将帮助我设计我正在制作的程序中的一部分。

3 个答案:

答案 0 :(得分:3)

因为在子类中重写了方法MyPrMethod(),所以将调用子类实现。

调用的实际方法取决于调用它的对象

答案 1 :(得分:2)

将使用子类的方法版本。当MyPuMethod调用MyPrMethod时,首先检查类(MySubClass)是否有所需的方法,并且只有在未定义的情况下才会递归搜索父类。我们当前正在执行的方法在不同的类中定义的事实不会改变这一点。

答案 2 :(得分:1)

来自子类MySubClass的MyPrMethod将被调用。