Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java继承、动态调度考试题_Java_Inheritance - Fatal编程技术网

Java继承、动态调度考试题

Java继承、动态调度考试题,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

这是一个来自UW CSE 143的问题。我只是在学习过去的考试,以便更好地掌握Java

    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.