本次 Lab 时长为 2 周,DDL 为 10 月 23 日 23:59。
附件下载(包括问答题和实验报告模板):https://bhpan.buaa.edu.cn/link/AA96D0CA694BB74ABFA070F38B6C527AC6
this
和 super
的使用随着代码量的增加,建议建立一个自己的统一且良好的代码风格,比如命名风格(camelCase、PascalCase 等)、缩进方式(空格数量、switch-case 缩不缩进等)、开闭大括号换不换行等容易引发战争(迫真)的东西,以养成良好的编程习惯。
比如命名规范,可以参考 Oracle 官网的 Naming Conventions。大家可以在 IDEA、VSCode 中上找到对应的代码风格检查工具,也可以自己设置自己的代码风格文件,例如:VSCode 插件 checkstyle。
编程题最好为每一个类编写一个完备的测试类,覆盖尽可能多的输入、函数调用、输出,以证明代码正确实现了功能。
如果编程题使用了 package
语句,应当确保提交时目录结构和 package
语句表达的包结构相同。(IDE 很多时候会帮你做。)
本次 Lab 的示例代码位于北航云盘的附件里。
浏览 Code 目录下的 Question01 目录,不允许变更目录结构和文件位置,只允许在文件中添加 package
和 import
语句,使根目录下 build
和 test
文件中的指令可以无报错顺利执行。
build
和 test
为脚本文件,直接在 IDE 或文本编辑器中打开即可看到其中的指令。
你可以把 Question01 目录复制到解答的压缩包中,或者在解答报告中直接以文字或截图说明你的改动。
阅读 Code 目录下的 Question02 目录,根据你对访问权限的理解。将文件中所有无法通过编译的语句注释掉。
你遇到的问题可能会集中在 protected
和默认访问权限。
从这次实验和上一次实验,可以引申出两个问题,你需要在解答中说出你的想法。
private
时,可能有子类吗?final
类可以视为所有构造方法都是 private
的类吗?如果不知道怎么编译和运行,参见第一题。
你可以把 Question02 目录复制到解答的压缩包中,或者在解答报告中直接以文字或截图说明你的改动。
阅读下面代码(或参见 Code 目录下的 Question 03)
1 | class Parent { |
回答下面问题。
java Test
,程序的运行结果是什么?protected void foo()
改为默认访问权限,程序还能通过编译吗?protected void bar()
改为默认访问权限,程序还能通过编译吗?foo
和 bar
的测试输出结果表现一致吗?题外话:
在想要覆盖的时候,主动写一个
@Override
注解,可以提高代码可读性,也可以防止你想要覆盖但是写成了重载的情况发生。不想让父类方法在子类中被覆盖的时候,将父类方法声明为final
。
阅读下面的二维形状类 Shape
1 | public abstract class Shape { |
你的任务是:
Rectangle
类,a 和 b 分别代表矩形两条边的长度(长和宽);Rhombus
类,a 和 b 分别代表两条菱形对角线的长度;Ellipse
类,a 和 b 分别代表椭圆两个半轴(半长轴和半短轴)的长度;注意:
Shape
类,都必须要 override
方法 calcArea
;constructor
或者 setter
设定为负数时,将对应的值置为 0.0,或 throw
异常;题外话
我们知道属性不设置为
public
是为了保护数据,如果 a 和 b 在Shape
中的访问权限被设置为private
,在不添加新的属性的情况下,子类想要实现自己的calcArea()
该怎么办?在解答中写出你的思考。
定义一个 Vehicle
类,在其中声明一个属性代表这个交通工具有多少个轮子,提供对这个属性的 setter
。提供轮子类、引擎类。创建几个 Vehicle
的导出类:Motorbike
、Car
、Tank
。自由发挥,在测试类中构造这几种交通工具,并测试功能。
其中 Motorbike
类需增加两个属性:driver
和 passenger
表示司机和乘客。增加你觉得合适的方法。
定义一个 Person
类,加入你觉得合适的属性和方法,生成 brother
和 sister
两个对象,结合 Motorbike
试图实现以下场景:
Motorbike
实例 motorbike
,Person
实例 brother
、sister
)motorbike
的司机与乘客为 brother
和 sister
motorbike
的信息(尽可能详细)sister
的 say()
方法,输出“不像我,我只会心疼 giegie~”备注:这道题目绝不是 2221 同学们的助教出的。
操作系统中,有一个概念叫做文件系统。以 Windows 为例,其文件系统中的文件可以粗略地分为以下几种:
以上四种,都是“文件”。所有文件的属性都有:
文件夹
- 不考虑 OS 层面的内存对齐,文件夹的大小等于其内部所有文件的大小的加和;
- 文件夹的额外属性是,它的直接子目录中包含的文件夹数和其他文件数;
- 打开文件夹,会切换当前的工作路径到该文件夹下,初始工作路径我们认为是 C 盘;
- 可以在文件夹中添加新的文件。
快捷方式
- 本质是一个类型为 .lnk 的文件;
- 快捷方式的额外属性是其指向的文件(可以是任何文件,包括快捷方式和文件夹);
- 打开快捷方式,等价于打开其指向的文件;指向的文件被删除后,无法打开快捷方式;
- 注意,快捷方式的所有属性,都代表其本身,不代表其指向的文件。
可执行文件
打开就是运行其内容。
不可执行文件
没有给出打开方式的情况下,无法被正确打开。
你的任务是
题外话
你可能需要回忆一下 C 中的结构体,学习一下 Java 中的 enum 类。