📅  最后修改于: 2023-12-03 15:28:42.708000             🧑  作者: Mango
这是 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
这个问题考察了类的继承和多态性,在理解上述概念的基础上,我们可以比较容易地分析出程序的运行结果,并得到正确答案。但如果没有掌握这些概念,就很难理解代码的行为。所以,我们建议考生在准备考试时,多花时间掌握这些基础知识。