遗产。使用super()混淆

时间:2018-01-29 02:25:29

标签: java inheritance

我很难过。当运行客户端代码(见底部)时,我认为行super.testIt()应该产生“it”而不是“up”,因此将 upitit 作为正确的答案。我编写了它并运行它, upupit 是正确的答案。为什么超级方法调用会回到子方法?

public class V
{
  public void one(){
     System.out.print("it");
  }
  public void two(){
     System.out.print("go");
  }
  public void testIt(){
     one();
  }  
}

public class W extends V
{
  public void one(){
     System.out.print("up");
  }
  public void two(){
     System.out.print("at");
  }
  public void testIt(){
     one();
     super.testIt();
     super.one();
  }
}

///////////////////////////////////////////////////////////////
//client code in the main of another class
W x = new W();
x.testIt();

1 个答案:

答案 0 :(得分:1)

底层类是W.由于多态性,它将调用W的one()方法。