在Java中使用继承调用的方法顺序

时间:2018-03-17 21:21:52

标签: java inheritance

字母打印的顺序是“ABDC”为什么打印最后一个字母C?我在代码中的注释中提供了我的思考步骤和指南。

public class Base {

public static void main(String[] args) {
    Base b = new Derived();
    b.methodOne();
}

public void methodOne() { //Step 1
    System.out.print("A"); //Print "A" first
    methodTwo();      //Sends me to Derived class's methodTwo()
    }

public void methodTwo() { //Step 3
    System.out.print("B");  //Print "B" second
}

}

public class Derived extends Base{

public void methodOne() {
    super.methodOne();
    System.out.print("C");
}

public void methodTwo(){     //Step 2
    super.methodTwo();       //Sends me to Base class's methodTwo()
    System.out.println("D"); //Step 3 Print "D"
}

}

2 个答案:

答案 0 :(得分:0)

来自methodOne的{​​p> Derived会从methodOne覆盖Base。这意味着,如果您有一个 class Derived的对象 - 即创建为new Derived()的对象;然后,当您在该对象上调用methodOne()时,您将从methodOne调用Derived版本。你称之为的变量 type 并没有什么区别。

因此,在您的示例中,当您在b.methodOne()方法中编写main时,变量b类型并不重要是Base,重要的是变量是指 class Derived的对象。 methodOneDerived的版本打印"C"后,其他所有内容都已完成。

答案 1 :(得分:0)

通话顺序:

  1. main构建Derived
  2. 的实例
  3. Derived.methodOne致电
  4. super.methodOne == Base.methodOne调用
  5. this.methodTwo == Derived.methodTwo calls
  6. super.methodTwo = Base.methodTwo
  7. 现在你必须遵守调用其他方法的顺序和System.out.println(在Base首先打印,然后调用,Derived反过来。