(1).编写一个深圳大学类SZU和一个学院类College。SZU类中包含有多个College类的实例。调用SZU类的实例中的getColledgeNames()方法时,能够输出所有学院的名字;调用SZU类的实例中的getColledgeNumber()方法时,能够输出学院的数量。在报告中附上程序截图、运行结果截图和详细的文字说明。(10分)
1. College 类表示学院,具有一个字段 name 用于存储学院的名称。
构造方法 public College(String name) 用于初始化学院的名称。
getName() 方法用于获取学院的名称。
2. SZU 类表示深圳大学,具有一个 List<College> 类型的字段 colleges 用于存储学院列表。
构造方法 public SZU() 初始化学院列表。
addCollege(College college) 方法用于向学院列表中添加学院。
getCollegeNames() 方法用于输出学院列表的名称。
getCollegeNumber() 方法用于输出学院的数量。
3. First 类包含 main 方法,用于创建 SZU 实例。
添加两个学院,并调用方法输出学院数量和学院列表。
4.运行代码,运行结果如下图所示。
(2).把SZU类和College类放进cn.edu包中。编写一个测试类,在源代码中用import语句引入cn.edu包中的所有类,并对它们所包含的方法进行测试。在报告中附上程序截图、运行结果截图和详细的文字说明。(10分)
1.新建一个软件包,命名为cn.szu,接着新建两个类,命名为College和SZU。
2.在College类中写入以下代码:
College 类表示学院,具有一个字段 name 用于存储学院的名称。
构造方法 public College(String name) 用于初始化学院的名称。
getName() 方法用于获取学院的名称。
3. 在SZU类中写入以下代码:
SZU 类表示深圳大学,具有一个 List<College> 类型的字段 colleges 用于存储学院列表。
构造方法 public SZU() 初始化学院列表。
addCollege(College college) 方法用于向学院列表中添加学院。
getCollegeNames() 方法用于输出学院列表的名称。
getCollegeNumber() 方法用于输出学院的数量。
4.新建一个Second类,导入cn.szu包,接着在main 方法中创建 SZU 实例。
添加两个学院,并调用方法输出学院数量和学院列表。
5. 运行代码,运行结果如下图所示。
(3).定义一个包,在该包中定义一个类并输出“我爱中国/I love China”字符串。在报告中附上程序截图、运行结果截图和详细的文字说明。(10分)
1.定义一个包,命名为Third,再在包中定义一个类。
2.在该类中编写代码输出字符串I love China。
package 关键字: 在 Java 中,package 是一个关键字,用于声明一个包。包是用来组织和管理类的命名空间的一种机制。
3.运行代码,运行结果如下图所示。
(4).在一个包中定义一个默认访问权限控制的类DefaultClass,然后在该包以及另一个包中分别定义类来测试DefaultClass类中的private, default, protected和public数据成员的访问控制能力。在报告中附上程序截图、运行结果截图和详细的文字说明。(10分)
1.按提议所示新建软件包和类,如下图所示。
2. 在DefaultClass类中新建private, default, protected和public数据成员,并创建默认构造方法。
3.在同一个软件包中的TestIn类中输入以下代码,首先可以看出私有变量是无法访问的。
4.注释掉那一行后运行代码,结果如下图所示,可见在同一个包中,可以访问 DefaultClass 的除私有变量外的其他成员变量。
5.在软件包外的TestOut类中写入以下代码,均报错,可知在不同的包中,只能访问 public 成员,无法访问 private、default、protected 成员(继承于该类的类可以访问到该类的protected方法或者变量)。
(5).在一个包中定义一个public访问权限控制的类PublicClass,然后在该包以及另一个包中分别定义类来测试PublicClass类中的private, default, protected和public数据成员的访问控制能力。在报告中附上程序截图、运行结果截图和详细的文字说明。(10分)
1.在前一个实验的DefaultClass类前加上public。
2.此时TestIn类仍然无法访问私有成员变量,可知在同一个包中,可以访问 DefaultClass 的除私有变量外的其他成员变量。
3.此时TestOut类可以访问public变量,可知在不同的包中,只能访问 public 成员,无法访问 private、default、protected 成员。
(6).编写一个抽象类Bird,它具有三个抽象方法flying, nesting, eating和singing。分别实现这个抽象类的三个子类Eagle、Dove和Sparrow。实现一个测试类,在测试类的main方法中分别使用这三个子类创建对象实体,然后通过它们的上转型对象变量调用flying()方法、nesting()方法、eating()方法和singing()方法。在报告中附上程序截图、运行结果截图和详细的文字说明。(10分)
1.在Bird类中实现四个抽象方法:飞行、筑巢、进食、唱歌。
2.接下来在实现这个抽象类的三个子类Eagle、Dove和Sparrow。
3.接着实现一个测试类,在测试类的main方法中分别使用这三个子类创建对象实体,然后通过它们的上转型对象变量调用flying()方法、nesting()方法、eating()方法和singing()方法。
4.运行代码,结果如下图所示。
(7).一个四维向量由四个分量组成。四维向量的相加、相减和点乘等价于对应四个分量的相加、相减和相乘。比如两个四维向量(5,2,1,8)和(3,-1,0,-4),它们的和为(8,1,1,4),它们的差为(2,3,1,12),它们的点乘为(15,-2,0,-32)。编写一个接口Computable,它具有三个抽象方法add、minus和elementwiseProduct。编写一个Vector类,通过Computable接口实现四维向量的相加、相减和点乘。在报告中附上程序截图、运行结果截图和详细的文字说明。(10分)
1. 编写一个接口Computable,它具有三个抽象方法add、minus和elementwiseProduct。
2. 编写一个Vector类,通过Computable接口实现四维向量的相加、相减和点乘。
3. 实现样例:两个四维向量(5,2,1,8)和(3,-1,0,-4),它们的和为(8,1,1,4),它们的差为(2,3,1,12),它们的点乘为(15,-2,0,-32)。
4.运行代码,结果如下图所示。
(8).关于面向对象编程中的三个特性(封装、继承和多态),谈谈你的理解,并对封装或继承,通过类比、关联或演绎的方式,举一个在日常的学习生活中可以应用的例子(要求积极向上且能自圆其说)。(10分)
面向对象编程的三个特性:封装、继承和多态
封装: 封装是将数据和方法进行组合并尽可能地隐藏内部实现细节的面向对象编程特性。通过封装,对象的内部实现对外部是不可见的,只有通过公共接口才能访问对象的功能。这有助于提高代码的安全性和可维护性。
继承: 继承是通过使用已存在的类来创建新类的机制,新类继承了已存在类的属性和行为。这促使了代码的重用,提高了代码的可维护性和扩展性。子类可以继承父类的属性和方法,并且可以在需要时覆盖或扩展它们。
多态: 多态性是指同一个操作作用于不同的对象,可以产生不同的行为。多态通过接口和抽象类实现,使得一个类的实例可以以多种形式表现,提高了代码的灵活性和可扩展性。
例子:封装、继承和多态在电子设备中的应用
封装:手机内部有许多复杂的硬件和软件,但用户不需要了解这些细节。用户与手机交互的主要方式是通过屏幕、按钮和触摸,这些构成了一个良好的封装,隐藏了内部的复杂性。
继承: 假设有一家公司推出了新款手机,该手机在之前的基础上进行了改进。公司可以通过继承原有手机的设计和功能,创建一个新的手机型号。这样,新手机可以继承并重用已有手机的一些特性,而开发人员只需关注新增或修改的部分。
多态: 在手机应用中,有许多不同类型的界面元素,例如按钮、文本框等。这些元素可能有不同的实现,但它们都共享相同的接口。比如,一个按钮可以响应点击事件,而一个文本框可以接受用户输入。在用户界面中,你可以使用相同的代码和方法处理不同类型的元素,这就是多态的体现。
在这个例子中,封装让用户无需了解手机的内部工作原理,继承允许公司在新手机中重用已有手机的功能,而多态使得处理不同类型的界面元素更加灵活。
(by 归忆)