阿里巴巴编程笔试题目分析:继承与成员变量输出

5星 · 超过95%的资源 需积分: 9 4 下载量 87 浏览量 更新于2024-09-13 收藏 254KB DOC 举报
"阿里巴巴笔试题主要考察了Java编程的基础知识,包括类继承、方法调用和访问修饰符。以下是针对提供的代码段进行的详细解析:" 1. 选择题内容分析: 这段代码包含两个类,`Base` 和 `Derived`。`Base` 类定义了一个整型变量 `i` 被初始化为 99,并有一个名为 `amethod()` 的公共方法,用于打印 "Base.amethod()"。在 `Base` 类的构造函数中,会调用 `amethod()`。 `Derived` 类继承自 `Base`,并在继承时重写了 `i` 变量,将其值设为 -1。`Derived` 类还定义了一个公共静态方法 `main()`,在其中创建了一个 `Derived` 类的实例 `b` 并将其赋值给 `Base` 类型的引用。然后,程序试图打印 `b.i` 的值以及调用 `b.amethod()`。 关键知识点: - 继承:`Derived` 类通过关键字 `extends` 继承了 `Base` 类,这使得 `Derived` 类可以访问 `Base` 类中的成员。 - 字段覆盖(字段重载):`Derived` 类中的 `i` 变量覆盖了父类 `Base` 中同名的变量,因为它们都是实例变量(non-static)且类型相同。 - 方法覆盖(方法重写):`Derived` 类中的 `amethod()` 方法覆盖了 `Base` 类的同名方法,这意味着 `Derived` 类实例调用 `amethod()` 时,执行的是 `Derived` 类的方法,输出 "Derived.amethod()"。 - 构造函数和方法调用:在 `Derived` 类的 `main()` 方法中,虽然 `b` 是 `Base` 类型的引用,但因为 `Derived` 类实例化后,`Base` 类的构造函数会被自动调用,所以 `amethod()` 方法也会执行,输出 "Base.amethod()"。 答案选项分析: - A 选项 "Derived.amethod() -1 Derived.amethod()" 提供的信息不完整,应该仅包含两次调用的输出,而不是值。 - B 选项 "Derived.amethod()" 只包含了 `Derived` 类的 `amethod()` 被调用后的输出,忽略了初始 `b.i` 的值。 正确答案应该是:A 选项表示先输出 `Base.amethod()`,然后输出 `Derived.amethod()`,由于 `b` 是 `Derived` 实例,最后 `i` 的值为 -1。因此,完整的输出应是:"Base.amethod()" 和 "Derived.amethod()",之后跟随 `-1`。 总结:这个题目旨在测试候选人的面向对象编程理解,特别是关于类继承和方法调用的概念,以及如何在不同层次的类中正确调用和覆盖方法。