Java基础入门day23

day23

实践题:

需求:

  • 学院要求有学院的基本信息

  • 学院的老师也要有基本信息

  • 学院的打印机可以分别打印学院的基本信息和教师的基本信息

  • 设计这样一个系统,要求要有较好的可扩展性和可维护性

package com.saas.oo1;
​
public class College {
​String name;            //  学院的名称String position;        //  学院的位置int year;               //  学院的建校时间
​//  学院的打印机,将打印机与名称位置等一样,做成学院的一个属性Printer printer = new Printer();
​//  学院的打印机来打印学院的信息public void printContent(College coll){//  printer是打印机对象,是学院类中的一个打印机属性//  学院的打印机调用打印机的打印方法,将学院的详细信息进行打印printer.print(coll.info());}
​//  学院的打印机来打印教师的信息public void printContent(Teacher tea){//  printer是打印机对象,是学院类中的一个打印机属性//  学院的打印机调用打印机的打印方法,将教师的详细信息进行打印printer.print(tea.info());}
​//  学院的信息public String info(){String detail = "name:\t" + name +"\nposition:\t" + position +"\nyear:\t" + year;
​return detail;}
}
package com.saas.oo1;
​
public class Teacher {
​String name;                //  教师的姓名
​String major;               //  教师的专业
​//  教师的详细信息public String info(){String detail = "name:\t" +name + "\nmajor :\t" + major;
​return detail;}
}
package com.saas.oo1;
​
/*** 打印机类*      打印机可以打印任何给定的内容资源*/
public class Printer {
​/*** 打印机能够打印指定的内容信息* @param content*/public void print(String content){System.out.println("start printting...");System.out.println(content);}
}
package com.saas.oo1;
​
public class Test {
​public static void main(String[] args) {//  创建学院对象College coll = new College();
​//  分别给学院对象的名称、位置和建校时间赋值coll.name = "xianyangzhiye";coll.position = "tongyilu";coll.year = 86;
​//  调用学院的打印方法打印学院的详细信息coll.printContent(coll);
​System.out.println("======================");
​//  构建教师对象Teacher tea = new Teacher();
​//  分别设置教师对象的姓名和专业信息tea.name = "wusong";tea.major = "software";
​//  调用学院的打印方法打印教师的详细信息coll.printContent(tea);}
}

最终的执行结果如下:

start printting...
name:   xianyangzhiye
position:   tongyilu
year:   86
======================
start printting...
name:   wusong
major : software

以上的执行结果基本可以满足之前要求的前三点

对于第四点,要求系统拥有良好的可扩展性和可维护性,目前并不能实现

现在升级以上代码,对于打印机进行进一步扩展,因为打印机可能存在黑白打印或者彩色打印

修改以上的部分类:

package com.saas.oo2;
​
/*** 打印机类*      打印机可以打印任何给定的内容资源*/
public class Printer {
​/*** 打印机能够打印指定的内容信息* @param content*/public void print(String content){System.out.println("start printing...");System.out.println(content);}
}
package com.saas.oo2;
​
/*** 彩色打印机*/
public class ColorPrinter extends Printer{
​@Overridepublic void print(String content) {System.out.println("=======color printing=========");super.print(content);}
}

彩色打印机继承自打印机类

package com.saas.oo2;
​
/*** 黑白打印机*/
public class BlackPrinter extends Printer{
​@Overridepublic void print(String content) {System.out.println("=======blank white printing=========");super.print(content);}
}

黑白打印机继承自打印机类

package com.saas.oo2;
​
public class College {
​String name;            //  学院的名称String position;        //  学院的位置int year;               //  学院的建校时间
​//  学院的打印机,将打印机与名称位置等一样,做成学院的一个属性private Printer printer;
​public void setPrinter(Printer printer) {this.printer = printer;}
​//  学院的打印机来打印学院的信息public void printContent(College coll){//  printer是打印机对象,是学院类中的一个打印机属性//  学院的打印机调用打印机的打印方法,将学院的详细信息进行打印printer.print(coll.info());}
​//  学院的打印机来打印教师的信息public void printContent(Teacher tea){//  printer是打印机对象,是学院类中的一个打印机属性//  学院的打印机调用打印机的打印方法,将教师的详细信息进行打印printer.print(tea.info());}
​//  学院的信息public String info(){String detail = "name:\t" + name +"\nposition:\t" + position +"\nyear:\t" + year;
​return detail;}
}

将College类中的打印机属性设置为可插拔式方式实现

这种设计,非常方便,给定的任何打印机类型的对象,都将以这种打印机效果进行打印

注意:这种设计还有一个缺陷,学院和教师都有详细信息的描述,后面我们可以使用接口来进行升级改造

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

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

相关文章

【C++初阶】之类和对象(中)

【C初阶】之类和对象(中) ✍ 类的六个默认成员函数✍ 构造函数🏄 为什么需要构造函数🏄 默认构造函数🏄 为什么编译器能自动调用默认构造函数🏄 自己写的构造函数🏄 构造函数的特性 ✍ 拷贝构造…

gethostbyname()域名解析到IP

利用域名获取IP gethostbyname() (该函数在Linux手册中已经被标注[[deprecated]]&#xff0c;不建议再使用。) #include <netdb.h>struct hostent* gethostbyname(const char* hostname);入参是域名字符串&#xff0c;返回值中存储了对应的IP地址。 struct hostent {…

在Windows系统上安装多个 Nodejs

前言 在Windows系统安装Nodejs 在Windows系统上安装多个 Nodejs v14.16.1安装位置 D:\sde\nodejs\node-v14.16.1-win-x64 v16.20.2安装位置 D:\sde\nodejs\node-v16.20.2-win-x64 v18.20.0安装位置 D:\sde\nodejs\node-v18.20.0-win-x64 v20.12.0安装位置 D:\sde\nod…

Java毕业设计-基于springboot开发的游戏分享网站平台-毕业论文+答辩PPT(附源代码+演示视频)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构 三、系统实现展示1、系统功能模块2、后台登录2.1管理员功能模块2.2用户功能模块 四、毕设内容和源代码获取总结 Java毕业设计-基于springboot开发的…

ChatGLM2本地部署方法

chatglm2部署在本地时&#xff0c;需要从huggingface上下载模型的权重文件&#xff08;需要科学上网&#xff09;。下载后权重文件会自动保存在本地用户的文件夹上。但这样不利于分享&#xff0c;下面介绍如何将chatglm2模型打包部署。 一、克隆chatglm2部署 这个项目是chatgl…

“李子园”上榜中国民营企业社会责任优秀案例

日前&#xff0c;由浙江省工商联、浙江工商大学主办&#xff0c;杭州市工商联协办的2024浙江民营企业社会责任暨浙商ESG研讨会在杭州召开&#xff0c;探索民营企业履行社会责任的方法路径和趋势。会上公布了2023年中国民营企业社会责任优秀案例&#xff08;浙江入选企业&#x…

【小尘送书-第十五期】Excel函数与公式应用大全for Excel 365 Excel

大家好&#xff0c;我是小尘&#xff0c;欢迎你的关注&#xff01;大家可以一起交流学习&#xff01;欢迎大家在CSDN后台私信我&#xff01;一起讨论学习&#xff0c;讨论如何找到满意的工作&#xff01; &#x1f468;‍&#x1f4bb;博主主页&#xff1a;小尘要自信 &#x1…

jQuery选择器

什么是jQuery选择器&#xff1f; jQuery选择器 是指对#JavaScript# 选取元素的操作进行了封装&#xff0c;使选择 Html 元素时更加的容易。 jQuery选择器作用&#xff1f; jQuery 选择器类似于 CSS 选择器&#xff0c;用来选取网页中的元素 $("h3").css("back…

【Linux】对进程地址空间的理解

一、关于进程地址空间的简单理解 进程地址空间其实是分了很多个区域的&#xff0c;区域划分的本质就是区域内的各个地址都是可以使用的。如同下面这个图所示&#xff1a; 无论是环境变量的地址还是环境变量表的地址&#xff0c;所存放的地址都在栈的上部。这里的已初始化数据和…

golang 使用protobuf

1.下载protobuf的编译器&#xff0c;安装到系统设置环境变量 地址&#xff1a;https://github.com/protocolbuffers/protobuf/releases 下载对应的编译器 2.安装库文件 二选一 go get github.com/golang/protobuf/proto go get github.com/gogo/protobuf/proto 安装go语言插件 …

浅谈性能测试

本文主要针对WEB系统的性能测试。不涉及具体的执行操作&#xff0c;只是本人对性能测试的一点理解和认识。 性能测试的目的&#xff0c;简单说其实就是为了获取待测系统的响应时间、吞吐量、稳定性、容量等信息。而发现一些具体的性能相关的缺陷&#xff08;如内存溢出、并发处…

centos7系统下nginx1.24.0升级

如果没有这些目录&#xff0c;请先创建: mkdir /data/software mkdir /data/program提前下载所需的软件&#xff1a; cd /data/software wget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz wget https://nginx.org/download/nginx-1.24.0.tar.gz安装nginx cd /data/soft…

微信小程序开发之常用组件解释

1 基础内容组件 1.1text组件 text的功能主要是用于内联文本&#xff0c;与网页中的span有点类似。 主要属性有 例子&#xff1a;页面上添加一个可以选中的文本 在wxml文件中添加&#xff1a; <view> <text user-select>17544456565</text> </view>…

洗地机哪个好?专业对比,帮你选出比较适合的洗地机

随着科技的不断发展&#xff0c;洗地机已经成为了现代生活中不可或缺的清洁工具。然而&#xff0c;市面上涌现出各种各样的洗地机品牌&#xff0c;品质良莠不齐。因此&#xff0c;选择一个可靠的品牌至关重要&#xff0c;以确保产品质量和使用效果。为了帮助大家更好地选择&…

数据结构 之 栈与单调栈习题 力扣oj(附加思路版)

#include<stack> --栈的头文件 栈的特点 &#xff1a; 先进后出 &#xff0c; 后进先出 相关函数&#xff1a; top() 获取栈顶元素 ,返回栈顶元素的值 pop() 删除栈顶元素 ,没有返回值 push() 放入元素 ,没有返回值 empty() 为空返回 true 否则返回false size() 元素…

二叉树|701.二叉搜索树中的插入操作

力扣题目链接 class Solution { public:TreeNode* insertIntoBST(TreeNode* root, int val) {if (root NULL) {TreeNode* node new TreeNode(val);return node;}if (root->val > val) root->left insertIntoBST(root->left, val);if (root->val < val) r…

两分钟了解NTP网络时间服务器原理

两分钟了解NTP网络时间服务器原理 两分钟了解NTP网络时间服务器原理 NTP网络时间服务器是针对计算机、自动化装置等进行校时而研发的高科技设备&#xff0c;该产品可从GPS卫星&#xff08;北斗卫星、B码接口、PTP&#xff09;上获取标准的时间信号&#xff0c;将这些信号通过各…

从后端到前端

原文地址&#xff1a;从后端到前端 - Pleasure的博客 下面是正文内容&#xff1a; 前言 在前面几章中主要介绍了系统开发的后端部分&#xff0c;但是验证接口的适用性只能通过专门的软件&#xff08;Apifox&#xff0c;Postman等&#xff09;来进行测试。那从现在开始&#xf…

EmmyLua 远程调试 Lua 代码

EmmyLua EmmyLua 可以调试 C Lua 混合编程的项目 EmmyLua 调试器 Github 地址&#xff1a; https://github.com/EmmyLua/EmmyLuaDebugger LuaJIT 项目中用到 LuaJIT &#xff0c;正常思路静态链接了 LuaJIT 库。这导致了 EmmyLua 不能用 启动脚本 要使用 EmmyLua 远程调试…

网络安全实训Day12

写在前面 注意根据笔记中的缩进判断该文本所在层级。 网络空间安全实训-网络安全技术 SSL VPN SSL协议 定义&#xff1a;一种应用层的安全保护技术 工作流程 1.客户端与服务器通过三次握手建立TCP连接 2.客户端向服务器发送Client-Hello信息&#xff0c;消息中包含希望访问的…