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

"阿里巴巴笔试题主要考察了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`。
总结:这个题目旨在测试候选人的面向对象编程理解,特别是关于类继承和方法调用的概念,以及如何在不同层次的类中正确调用和覆盖方法。
121 浏览量
137 浏览量
127 浏览量
111 浏览量
2011-12-02 上传
113 浏览量

Gaoyang27
- 粉丝: 0
最新资源
- 软件人员必读:六十本影响一生的经典著作
- SQL Server 2005:关键特性与数据库管理提升
- Scheme语言教程:编程语言中的‘皇后’
- 模式识别课程概述:贝叶斯方法与特征分析
- Java面试必备知识点与经典题目解析
- 富兰电子2008年软件工程师笔试题解析
- 电信网络实习日记:探索宽带数据部
- UG三维建模思路与技巧解析
- C++编程规范与最佳实践
- ASP.NET常用函数详解
- ASP.NET中JavaScript实例:无刷新Dropdownlist与表单验证
- JBPM入门与实战教程:工作流开发详解
- JAVA程序设计:从起源到工作原理
- C#网络编程入门:深入Remoting
- 理解与编写Makefile:Unix/Linux下的自动化编译工具
- 清华大学操作系统课程讲义-向勇主讲