深圳大学-Java程序设计-选实验3 包及继承应用

news2025/1/10 16:46:39

实验目的与要求

    实验目的:熟悉面向对象编程中package,import等语句的使用。

实验要求:

(1).编写一个计算机与软件学院类CSSE、一个研究所/中心类Institute和一个教学系类Department。CSSE类中包含有多个Institute类的实例和多个Department类的实例。调用CSSE类的实例中的getInstituteNames()和getDepartmentNames()方法时,能够分别输出所有研究所/中心的名字和所有教学系的名字;调用CSSE类的实例中的getInstituteNumber()和getDepartmentNumber()方法时,能够分别输出研究所/中心的数量和教学系的数量。在报告中附上程序截图、运行结果截图和详细的文字说明。相关信息见https://csse.szu.edu.cn/pages/organization/index(10分)

(2).根据https://csse.szu.edu.cn/pages/organization/index中的介绍,进一步完善CSSE类中关于“行政办公室”、“实验中心”、“期刊编辑部”和“国家工程实验室”的成员变量和成员方法。在报告中附上程序截图、运行结果截图和详细的文字说明。(10分)

(3).把CSSE类、Institute类和Department类放进cn.edu.szu包中。编写一个测试类,在源代码中用import语句引入cn.edu.szu包中的所有类,并对它们所包含的方法进行测试。在报告中附上程序截图、运行结果截图和详细的文字说明。(10分)

(4).通过文字解释或程序来说明以下各种组合是否允许,如果允许表示什么意思,如果不允许是为什么。同时,在下表中,对不允许的组合,填入NO。(30分)

类中的成员变量

类中的成员方法

类中的构造方法

private

public

final

abstract

static

(5).面向对象编程有三个特性(封装、继承和多态),请对“封装”、“继承”和“多态”这三个特性,通过类比、关联或演绎的方式,举一个在日常的学习生活中可以应用的例子(要求积极向上且能自圆其说)。(20分)

特别说明:本次作业要求在实验课教室完成,在下课前,将实验报告在Blackboard上提交。(20分)

发现抄袭(包括复制&粘贴整句话、整张图),抄袭者和被抄袭者成绩记零分

  1. .编写一个计算机与软件学院类CSSE、一个研究所/中心类Institute和一个教学系类Department。CSSE类中包含有多个Institute类的实例和多个Department类的实例。调用CSSE类的实例中的getInstituteNames()和getDepartmentNames()方法时,能够分别输出所有研究所/中心的名字和所有教学系的名字;调用CSSE类的实例中的getInstituteNumber()和getDepartmentNumber()方法时,能够分别输出研究所/中心的数量和教学系的数量。在报告中附上程序截图、运行结果截图和详细的文字说明。相关信息见https://csse.szu.edu.cn/pages/organization/index(10分)

程序截图:

运行结果截图:

文字说明:

首先创建九个Institute类的实例,完成初始化,再创建一个包含这九个实例的数组,同理创建包含多个Department类的实例的数组。

然后创建一个CSSE类的实例,提供两个数组作为参数,最后调用CSSE类的实例中的各种方法,来获取或输出所需信息。

(2).根据https://csse.szu.edu.cn/pages/organization/index中的介绍,进一步完善CSSE类中关于“行政办公室”、“实验中心”、“期刊编辑部”和“国家工程实验室”的成员变量和成员方法。在报告中附上程序截图、运行结果截图和详细的文字说明。(10分)

文字说明:

参考例1完善代码,添加类并初始化。

(3).把CSSE类、Institute类和Department类放进cn.edu.szu包中。编写一个测试类,在源代码中用import语句引入cn.edu.szu包中的所有类,并对它们所包含的方法进行测试。在报告中附上程序截图、运行结果截图和详细的文字说明。(10分)

程序截图:

运行结果截图:

文字说明:

在这三个类的源文件的开头加上一行 package 语句:

package cn.edu.szu;

再将把CSSE类、Institute类和Department类放进cn.edu.szu包中。

编写一个测试类的时候,用 import 语句引入 cn.edu.szu 包中的所有类:

import cn.edu.szu.*;

然后,可以在测试类中直接使用 CSSE、Institute 和 Department 类,并对这些类的方法进行测试。(顺便将例2的其他类也都装进包中,进行测试)

(4).通过文字解释或程序来说明以下各种组合是否允许,如果允许表示什么意思,如果不允许是为什么。同时,在下表中,对不允许的组合,填入NO。(30分)

总体情况:

类中的成员变量

类中的成员方法

类中的构造方法

private

public

final

NO

abstract

NO

static

NO

具体情况

private 类中的成员变量:private修饰的成员变量只能被当前类访问不能被其他类或者子类访问。这样可以保护类的内部实现细节,实现数据的封装和隐藏。

private 类中的成员方法:被private修饰的成员方法只能被当前类访问,其他类不能访问被private修饰的成员方法不能被重写

private 类中的构造方法:构造方法可以被private修饰,如果当前类只有一个构造方法且被private修饰,那么其它类是无法创建当前类的对象并且当前类也是不能被继承的。

public类中的成员变量:它表示被修饰的成员变量可以被任何类访问,不管是同一个包还是不同的包。

public类中的成员方法:public表明成员方法是对所有用户开放的,可以直接进行调用

public类中的构造方法:public修饰的构造方法可以被其他类用来创建该类的对象。

final 类中的成员变量:被final修饰的变量,作用范围内常量,只允许一次赋值,且final修饰变量一旦赋值,不能修改

final 类中的成员方法:当应用于方法时,它表示该方法不能被子类重写

final 类中的构造方法:java中final不能修饰类中的构造方法。final修饰符用于防止方法被子类重写,但是构造方法不能被继承,所以没有必要用final修饰。如果尝试用final修饰构造方法,编译器会报错。

abstract类中的成员变量:被abstract修饰的类称为抽象类,语法:abstract class 类名{}

abstract类中的成员方法:被asbtract修饰的方法被称为抽象方法,抽象方法只有声明部分,没有方法的实现部分 ,抽象方法只能定义在抽象类中;但是抽象类中即可以定义抽象方法也可以定义非抽象方法。

abstract类中的构造方法:abstract类中如果自己提供constructor(构造方法),则用protected修饰为好,因为是给子类用的(抽象类需要继承)。

static 类中的成员变量:被static修饰的属性称为静态属性、静态变量、类变量

static 类中的成员方法:被static修饰的方法称为静态方法,静态方法中只能访问本类的静态成员(静态属性和静态方法) 静态方法中不能直接访问本类的非静态成员(实例变量+非静态方法)

static 类中的构造方法:因为static修饰的成员是属于类的,而构造方法是属于对象的,它们是不匹配的。如果尝试用static修饰构造方法,编译器会报错。

(5).面向对象编程有三个特性(封装、继承和多态),请对“封装”、“继承”和“多态”这三个特性,通过类比、关联或演绎的方式,举一个在日常的学习生活中可以应用的例子(要求积极向上且能自圆其说)。(20分)

比如说可以把自己的个人信息(如姓名、年龄、性别、学号等)封装在一个 Student 类中,只提供一些公共的方法(如 getName、getAge、getGender、getId 等)供其他人获取我们的信息,而不需要暴露我们的所有细节。这样可以保护我们的隐私,也方便我们管理和更新我们的信息。

接着,可以把 Student 类作为一个父类,从它继承一些通用的属性和方法(如姓名、年龄、性别、学号、getName、getAge、getGender、getId 等),然后创建一些子类(如 Undergraduate、Graduate、PhD 等),分别添加一些特有的属性和方法(如专业、导师等)。这样可以实现学生类别的分类和区分,也可以复用和扩展 Student 类的代码。

然后,定义一个接口(如 Study),其中有一个抽象方法(如 study),然后让不同的学生子类(如 Undergraduate、Graduate、PhD 等)实现这个接口,并且重写这个方法,根据自己的学习方式来具体实现。这样,当我们调用 Study 接口类型的对象(如 s)的 study 方法时(如 s.study()),就会根据对象 s 的实际类型来执行相应的方法体。例如,如果 s 是 Undergraduate 类型,就会执行 Undergraduate 类中重写的 study 方法;如果 s 是 Graduate 类型,就会执行 Graduate 类中重写的 study 方法。这样就实现了多态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2212119.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

信息技术 04 WPS文字处理 图书订购单

信息技术 04 WPS文字处理 图书订购单 素材下载 信息技术 04 WPS文字处理 图书订购单链接:https://pan.baidu.com/s/1_S9HMfmiC6JJcjk4nO-tKg?pwdi304 提取码:i304 成品样图 题目 任务实现具体要求如下: ① 根据设计好的表格的结构&#…

基于 PyQt5 和 Matplotlib 的医学图像处理应用开发

1. 引言 在医学领域,图像处理是一项非常重要的技术,特别是在医学成像(如MRI、CT扫描等)的数据处理上,可以帮助医生更加准确地进行诊断。本项目基于 Python 的 PyQt5 图形用户界面框架与 Matplotlib 数据可视化库&…

Variational Auto-Encoder(VAE)缺少数学推导未完结版

VAE是Diffusion的基础,在其中将输入的图片数据编码到潜在空间后再解码出来。 略显复杂,博主结合李宏毅视频、网上一些讲解以及自己的理解将其总结如下: 一、什么是VAE VAE(变量自编码器)最早在以上两篇文章被提出。 …

yakit使用教程(四,信息收集)

本文仅作为学习参考使用,本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 前言:yakit下载安装教程。 一,基础爬虫。 在新建项目或新建临时项目后,点击安全工具,点击基础爬虫。 此工具并不是为了爬取网站上的一…

【零散技术】MAC 安装多版本node

时间是我们最宝贵的财富,珍惜手上的每个时分 不同前端项目运行的node版本不一致,会导致无法运行,就像Odoo也需要依据版本使用对应的python环境。python 可以用 conda随时切换版本,那么Node可以吗?答案是肯定的。 1、安装 n&#x…

k8s-资源管理、实战入门

资源管理 一、资源管理介绍 在kubernetes中,所有的内容都抽象为资源,用户需要通过操作资源来管理kubernetes。 (1)kubernetes的本质上就是一个集群系统,用户可以在集群中部署各种服务,所谓的部署服务&…

SpringBoot高校学科竞赛平台:性能优化与实践

3系统分析 3.1可行性分析 通过对本高校学科竞赛平台实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本高校学科竞赛平台采用SSM框架,JAVA作为开发语…

详细分析Redisson分布式锁中的renewExpiration()方法

目录 一、Redisson分布式锁的续期 整体分析 具体步骤和逻辑分析 为什么需要递归调用? 定时任务的生命周期? 一、Redisson分布式锁的续期 Redisson是一个基于Redis的Java分布式锁实现。它允许多个进程或线程之间安全地共享资源。为了实现这一点&…

C++ 高级特性:函数重载、内联函数、引用、auto关键字、范围for循环和nullptr空指针

目录: 📑前言📖函数重载📖内联函数📖引用☁️引用的概念☁️引用的特性⭐引用在定义时必须初始化⭐一个变量可以有多个引用(类比于一个人可以有多个外号)⭐ 引用一旦引用一个实体,再不能引用其他实体 ☁️常…

关于WPF(Windows Presentation Foundation)中Grid控件

本文将从Grid控件的基础概念开始,逐步深入探讨其特性、用法、实例代码,以及最佳实践。 1. WPF和布局简介 WPF是一种用于构建Windows桌面应用程序的UI框架,它通过XAML(Extensible Application Markup Language)使开…

java计算机毕设课设—扫雷游戏(附源码、文章、相关截图、部署视频)

这是什么系统? 资源获取方式再最下方(本次10月份活动福利,免费提供下载,自行到对应的方式1下载,csdn的0积分下载) java计算机毕设课设—扫雷游戏(附源码、文章、相关截图、部署视频) 基于Java的扫雷游戏…

电子电气架构 --- 智能网联汽车未来是什么样子?

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

C3D网络介绍及代码撰写详解(总结3)

可以从本人以前的文章中可以看出作者以前从事的是嵌入式控制方面相关的工作,是一个机器视觉小白,之所以开始入门机器视觉的学习主要是一个idea,想把机器视觉与控制相融合未来做一点小东西。废话不多说开始正题。(如有侵权立即删稿…

基于微信小程序的在线点歌系统(论文+源码)-kaic

摘 要 随着社会与互联网的发展,人们已经不在停留在温饱的层面上,而是开始了享受生活,而最能突出网络飞速发展的当属娱乐,从最初的网吧上网到现在的我们可以随时随地上网,观看自己喜欢的各式各样的电影电视剧和短视频&a…

数据结构与算法 - 顺序表与链表的区别

文章目录 前言 一、顺序表与链表的定义 1、顺序表 2、链表 二、区别 1、顺序表(动态顺序表): 2、链表(带头双向循环链表): 3、将上述文字用图表形式展示: 4、CPU高速缓存命中率 总结 前言 路漫漫其修远兮,吾将上下而求索…

Nginx实战指南:基础知识、配置详解及最佳实践全攻略

背景 在Java系统实现过程中,我们不可避免地会借助大量开源功能组件。然而,这些组件往往功能丰富且体系庞大,官方文档常常详尽至数百页。而在实际项目中,我们可能仅需使用其中的一小部分功能,这就造成了一个挑战&#…

数组中两个字符串的最小距离(图+文字详解)

链接:数组中两个字符串的最小距离__牛客网 题目:给定一个字符串数组strs,再给定两个字符串str1和str2,返回在strs中str1和str2的最小距离,如果str1或str2为null,或不在strs中,返回-1。 思路: 给定两个下标…

Pycharm 随时调整字体大小(放大或缩小)

实现按住 ctrl 滑动鼠标滚轮实现代码窗口字体大小调整: File 一>Settings 一>Editor一>General里 的Mouse Control把Change font size with CtrlMouse Wheel打上对勾,点击OK即可 使用快捷键 放大字体: Windows/Linux: Ctrl macOS…

IP报文格式、IPv6概述

IPv4报文格式 IPv4报文首部长度至少为20字节(没有可选字段和填充的情况下),下面来逐一介绍首部各个字段的含义 Version版本:表示采用哪一种具体的IP协议,对于IPv4来说该字段就填充4以表示,如果是IPv6就填充6IHL首部长度&#xff…

Android内容观察者(案例:监听数据库+代码+效果图)

目录 1.内容观察者概念 1. 什么是 ContentObserver? 2. 主要方法 3. 使用场景 4. 工作原理 5. 注册和注销 6. 实现步骤 7. 注意事项 2.创建内容观察者 3.注册内容观察者 4.取消注册内容观察者 5.完整的activity代码 6.案例:检测数据库 1)创建一个Android…