📜  门| GATE-CS-2005 |问题22(1)

📅  最后修改于: 2023-12-03 15:28:42.708000             🧑  作者: Mango

门 | GATE-CS-2005 | 问题22

这是 GATE-CS-2005 试卷的问题22,针对程序员。本题考察的是类的继承和多态性,需要考生灵活应用并理解这些概念。

问题描述

以下是一个 Java 类的定义:

class One {
    public void method1() {
        System.out.println("1 1 ");
        method2();
    }

    public void method2() {
        System.out.println("1 2 ");
    }
}

class Two extends One {
    public void method2() {
        System.out.println("2 2 ");
    }
}

public class Test {
    public static void main(String args[]) {
        One a = new Two();
        a.method1();
    }
}

请问上述程序的运行结果是什么?

解答

根据上述程序运行方式,我们可以知道在 main 方法中实例化的是 Two 类的实例 a,因为 Two 类是 One 类的子类。然后,我们又将 a 强制类型转换成 One,所以在 One 类的范围内,a 将变成 Two 类的实例。

当我们调用 a.method1() 方法时,首先会调用 One 类的 method1() 方法,它会输出 1 1 ,然后调用 method2() 方法,因为 a 实际上是 Two 类的实例,所以会调用 Two 类的 method2() 方法,它会输出 2 2

所以,整个程序的输出结果是:

1 1
2 2
总结

这个问题考察了类的继承和多态性,在理解上述概念的基础上,我们可以比较容易地分析出程序的运行结果,并得到正确答案。但如果没有掌握这些概念,就很难理解代码的行为。所以,我们建议考生在准备考试时,多花时间掌握这些基础知识。