关键词:
一对多
- 回顾:复习《阿里云【名师课堂】Java面向对象开发9:【第01个代码模型】综合案例:简单Java类》https://blog.csdn.net/weixin_43624945/article/details/106601659
要求程序描述出如下的对应关系:
- 一个部门有多个雇员,并且可以输出一个部门的完整信息(包括雇员信息);
- 可以根据一个雇员找到雇员对应的领导信息和雇员所在的部门信息。
既然是数据表与简单Java类,有如下要求(实际开发中的简单Java类的设计原则):
- 简单Java类的名称 = 实体表名称;
- 简单Java类的属性 = 实体表的字段;
- 简单Java类的一个对象 = 表的一行记录;
- 对象数组 = 表的多行记录;
- 外键关系 = 引用配置。
1、先将所有的基础字段转化为类。
class Emp{
private int eid ;
private String ename ;
private String job ;
private double sal ;
private double comm ;
public Emp(int eid,String ename,String job,double sal,double comm) {
this.eid = eid ;
this.ename = ename ;
this.job = job ;
this.sal = sal ;
this.comm = comm ;
}
public String getInfo() { // 返回类完整信息的方法,觉得混淆可以写getEmpInfo()
return "【EMP】id = " + this.eid + ",name = " + this.ename +
",job = " + this.job + ",salary = " + this.sal + ",commission = " + this.comm ;
}
}
class Dept{
private int did ;
private String dname ;
private String loc ;
public Dept(int did,String dname,String loc) {
this.did = did ;
this.dname = dname ;
this.loc = loc ;
}
public String getInfo() { // 返回类完整信息的方法,觉得混淆可以写getDeptInfo()
return "【DEPT】id = " + this.did + ",name = " + this.dname +
",location = " + this.loc ;
}
}
2、然后进行关系设计,列出数据表中对应的关系
- 一个雇员属于一个部门,需要追加部门引用;
- 一个雇员有一个领导,领导一定是自身关联,自身引用。
- 一个部门有多个雇员,需要一个对象数组来描述多个雇员信息。
在Emp类中加入:
private Emp mgr ; // 描述雇员的领导
private Dept dept ; // 描述雇员所在部门
public void setMgr(Emp mgr){
this.mgr = mgr ;
}
public Emp getMgr(){
return this.mgr ;
}
public void setDept(Dept dept){
this.dept = dept ;
}
public Dept getDept(){
return this.dept ;
}
在Dept类中加入:
private Emp [] emps ;
public void setEmps(Emp [] emps){
this.emps = emps ;
}
public Emp[] getEmps(){
return this.emps ;
}
3、最后根据开发需求设计
- 一个部门有多个雇员,并且可以输出一个部门的完整信息(包括雇员信息);
- 可以根据一个雇员找到雇员对应的领导信息和雇员所在的部门信息。
class Emp{
private int eid ; // 员工工号
private String ename ; // 员工姓名
private String job ; // 职位
private double sal ; // 薪水
private double comm ; // 佣金
private Emp mgr ; // 描述雇员的领导
private Dept dept ; // 描述雇员所在部门
public Emp(int eid,String ename,String job,double sal,double comm) {
this.eid = eid ;
this.ename = ename ;
this.job = job ;
this.sal = sal ;
this.comm = comm ;
}
public void setMgr(Emp mgr){
this.mgr = mgr ;
}
public Emp getMgr(){
return this.mgr ;
}
public void setDept(Dept dept){
this.dept = dept ;
}
public Dept getDept(){
return this.dept ;
}
public String getInfo() { // 返回类完整信息的方法,觉得混淆可以写getEmpInfo()
return "【EMP】id = " + this.eid + ",name = " + this.ename +
",job = " + this.job + ",salary = " + this.sal + ",commission = " + this.comm ;
}
}
class Dept{
private int did ; // 部门编号
private String dname ; // 部门名称
private String loc ; // 所在位置
private Emp[] emps ;
public Dept(int did,String dname,String loc) {
this.did = did ;
this.dname = dname ;
this.loc = loc ;
}
public void setEmps(Emp[] emps){
this.emps = emps ;
}
public Emp[] getEmps(){ // 注意这里返回值是数组,输出时使用for循环
return this.emps ;
}
public String getInfo() { // 返回类完整信息的方法,觉得混淆可以写getDeptInfo()
return "【DEPT】id = " + this.did + ",name = " + this.dname +
",location = " + this.loc ;
}
}
public class TestDemo { // 设置开发需求
public static void main(String args[]) {
// 第一步:设置类对象间的关系
// 1、分别创建各类的实例化对象
Dept depta = new Dept(10,"ACCOUNTING","New York") ;
Emp ema = new Emp(4396,"Dexter","CLERK",800.0,0.0) ;
Emp emb = new Emp(4728,"Tsukishima Kei","MANAGER",2500.0,0.0) ;
Emp emc = new Emp(1230,"Toono Takaki","PRESIDENT",4500.0,0.0) ;
// 2、设置对象间的引用关系
// 2.1 设置雇员与领导的关系
ema.setMgr(emb) ; // emb是ema的领导
emb.setMgr(emc) ; // emc是emb的领导,emc没有领导
// 2.2 设置雇员与部门的关系
ema.setDept(depta) ;
emb.setDept(depta) ;
emc.setDept(depta) ;
// 2.3 设置部门与雇员的关系
depta.setEmps(new Emp[] {ema,emb,emc}) ; // Emp[] emps = new Emp[] {ema,emb,emc}
// 第二步:根据关系取出数据
// 3、一个部门有多个雇员,并且可以输出一个部门的完整信息(包括雇员信息)
System.out.println(depta.getInfo()) ; // 输出部门的信息
for(int x= 0 ; x < depta.getEmps().length ; x++){ // 输出部门所有部员的信息
System.out.println(" ##" + depta.getEmps()[x].getInfo()) ;
if(depta.getEmps()[x].getMgr() != null){ // 领导不为空(有领导)时输出部员的领导信息
System.out.println(" @@" + depta.getEmps()[x].getMgr().getInfo()) ;
}
}
System.out.println("===============================================================") ;
// 4、可以根据一个雇员找到雇员对应的领导信息和雇员所在的部门信息
System.out.println(ema.getInfo()) ; // 输出雇员(任意一个)的信息
if(ema.getMgr() != null){ // 领导不为空(有领导)时输出部员的领导信息
System.out.println(" ##" + ema.getMgr().getInfo()) ;
}
if(ema.getDept() != null){ // 部门不为空(有部门)时输出部员的部门信息
System.out.println(" @@" + ema.getDept().getInfo()) ;
}
}
}
名师课堂java面向对象开发
课程介绍面向对象是Java语言之中最为重要的特征,本课程主要讲解面向对象的核心知识,并且利用大量的代码、数据结构课程深入分析Java面向对象特征。课程目标 掌握Java面向对象开发技术适合人群 Java学习者课时列表... 查看详情
java面向对象之继承!
/**作者:呆萌老师*☑csdn认证讲师*☑51cto高级讲师*☑腾讯课堂认证讲师*☑网易云课堂认证讲师*☑华为开发者学堂认证讲师*☑爱奇艺千人名师计划成员*在这里给大家分享技术、知识和生活*各种干货,记得关注哦!*/1、抽象&... 查看详情
java的面向对象编程--------课堂笔记
JAVA的面向对象编程--------课堂笔记面向对象主要针对面向过程。面向过程的基本单元是函数。 什么是对象:EVERYTHINGISOBJECT(万物皆对象) 所有的事物都有两个方面:有什么(属性):用来描述对象。能够做什么... 查看详情
第08章面向对象编程(中级部分)
韩顺平_循序渐进学Java零基础_第08章面向对象编程(中级部分)(P264-P361)第08章面向对象编程(中级部分)264.IDEA介绍265.IDEA下载安装266.IDEA使用1267.IDEA使用2268.IDEA使用3269.IDEA快捷键1270.IDEA快捷键2271.IDEA快捷键3272.IDEA... 查看详情
面向对象之多态
/**作者:呆萌老师*☑csdn认证讲师*☑51cto高级讲师*☑腾讯课堂认证讲师*☑网易云课堂认证讲师*☑华为开发者学堂认证讲师*☑爱奇艺千人名师计划成员*在这里给大家分享技术、知识和生活*各种干货,记得关注哦!*/1、什么... 查看详情
第10章面向对象编程(高级部分)
韩顺平_循序渐进学Java零基础_第10章面向对象编程(高级部分)(P374-P424)第10章面向对象编程(高级部分)374.类变量引出375.类变量快速入门376.类变量内存剖析377.类变量定义访问378.类变量使用细节379.类方法快速入... 查看详情
网易云课堂_java语言程序设计进阶_第1周类和对象_1分数
第1周编程题查看帮助返回 温馨提示:1.本次作业属于OnlineJudge题目,提交后由系统即时判分。2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩。第1周编程题。我们在题目说明中... 查看详情
第07章面向对象编程(基础部分)
韩顺平_循序渐进学Java零基础_第07章面向对象编程(基础部分)(P192-P263)第07章面向对象编程(基础部分)192.类与对象引出193.类与对象概述194.面向对象快速入门195.对象内存布局196.属性概念197.属性注意细节198.创建... 查看详情
第5篇-java面向对象ⅰ
第5篇-JAVA面向对象Ⅰ每篇一句 :面向对象面向君,不负代码不负卿初学心得:代码虐我千百遍,我待代码如初恋(笔者:JEEP/711)[JAVA笔记|时间:2017-04-03|JAVA面向对象Ⅰ]1.JAVA作为一种面向对象语言,具有以下基本概念:●多态 ... 查看详情
课堂笔记170504面向对象
面向过程:面向过程其实就是以函数(方法)为基础面向对象:基于面向过程,就是以对象为基础完成操作总结:世界万物皆对象 没有对象变量,只有引用到对象的变量,这个变量称之为指针,引用不是对象的容器,相当于... 查看详情
java简介
...活*各种干货,记得关注哦!*/ 1、什么是JavaJava是一门面向对象的高级程序设计语言。其底层实现是由c++来实现的,因此它具有许多与c++相似的特点,与此同时我们Java也抛弃了许多在c++当中较 查看详情
2018面向对象程序设计(java)学习进度条
周次(阅读/编写)代码行数发布博客量/评论他人博客数量课堂/课余学习时间(小时)最满意的编程任务第一周200/301/06/3九九乘法表第二周200/301/04/3实验2,实验3第三周 第四周 第五周  ... 查看详情
2018面向对象程序设计(java)课程学习进度条
《2018面向对象程序设计(java)课程学习进度条》周次(阅读/编写)代码行数发布博客量/博客评论量课堂/课余学习时间(小时)最满意的编程任务第一周40/20 1/0 4/5九九乘法表第二周 100/40 1/1 4/5实验3第三周&nbs... 查看详情
阿里云java开发规范考试总结(代码片段)
JAVA开发手册考试总结编程规范POJO(PlainOrdinaryJavaObject):POJO专指只有setter/getter/toString的简单类,包括DO/DTO/BO/VO等。DO(DataObject):此对象与数据库表结构一一对应,通过DAO层向上传输数据源对象。DTO(DataTransferObject):数据传输对象,Servic... 查看详情
为什么阿里巴巴建议开发者谨慎使用继承?
...?毫无忌讳的使用继承来做代码扩展真的好吗?为什么《阿里巴巴Java开发手册》中有一条规定:谨慎使用继承的方式进行扩展,优先使用组合的方式实现。 本文就来针对这些问题,简 查看详情
2016710101382016-2017java《面向对象程序设计课程学习进度条》
周次(阅读/编写)代码行数发布博客量/博客评论数量课堂/课余学习时间(小时)最满意的编程任务 第1周280/1603/06/5实验二任务三、五 第2周 第3周 第4周  ... 查看详情
《2018面向对象程序设计(java)课程学习进度条》
《2018面向对象程序设计(java)课程学习进度条》 周次(阅读/编写)代码行数发布博客量/博客评论量课堂/课余学习时间(小时)最满意的编程任务第一周100/20 1/0 4/3 九九乘法表第二周 200/50 1/0 6/4 ... 查看详情
《2018面向对象程序设计(java)课程学习进度条》
周次(阅读/编写)代码行数发布博客量/博客品论数量课堂/课余学习时间(小时)最满意的编程任务第一周150/301/15/3九九乘法表第二周200/801/16/3实验题3,实验题7第三周 第四周 第五周 &... 查看详情