Java继承、动态调度考试题
这是一个来自UW CSE 143的问题。我只是在学习过去的考试,以便更好地掌握JavaJava继承、动态调度考试题,java,inheritance,Java,Inheritance,这是一个来自UW CSE 143的问题。我只是在学习过去的考试,以便更好地掌握Java public class Box extends Pill { public void method2() { System.out.println("Box 2"); } public void method3() { method2(); System.out.println
public class Box extends Pill {
public void method2() {
System.out.println("Box 2");
}
public void method3() {
method2();
System.out.println("Box 3");
}
}
public class Cup extends Box {
public void method1() {
System.out.println("Cup 1");
}
public void method2() {
System.out.println("Cup 2");
super.method2();
}
}
Box var3 = new Cup();
问题:
如果调用var3.method3()
,输出是什么
我不知道为什么答案是肯定的
杯子2/盒子2/盒子3
第二杯从哪里来?我得到的动态类型是Cup。但是如果Cup类没有method3,那么它将转到method3的父类
var3.method3()
执行Box
方法(因为Cup
不会覆盖该方法):
method2()
执行Cup
的method2()
,因为var3
的动态类型是Cup
,并且Cup
覆盖框的method2()
:
public void method2() {
System.out.println("Cup 2");
super.method2();
}
这将打印“Cup 2”,然后super.method2()
执行super类方法:
public void method2() {
System.out.println("Box 2");
}
这个打印“框2”
最后,当我们返回到method3()
,将打印“框3”
因此,输出为
Cup 2
Box 2
Box 3.
请格式化源代码。是的,我很惊讶method2()执行Cup的method2(),因为它在box类中。
Cup 2
Box 2
Box 3.