SE 第二阶段
题目3
将以下描述信息转换为java代码,实现打印结果如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7xOJZ3Wc-1642708791323)(D:\黑马V12\21年黑马3-9\01阶段:JavaSE进阶面授——15\01-JavaSE进阶面授\day01【复习回顾、继承、抽象类】\作业\imgs\wps333E.tmp.jpg)]
1、定义员工Employee类,该类具有如下成员:
(1) 属性:姓名(name,字符串类型),工号(workId,字符串类型),部门(dept,字符串类型),属性私有
(2) 方法:
1. 空参数构造和满参数构造
2. 提供属性的set/get方法
3. 定义showMsg方法抽象方法
2、定义经理Manager类继承Employee类,该类具有如下成员:
(1) 属性:职员Clerk(该经理的职员)
(2) 方法:
1. 空参数构造方法和满参数构造方法
2. 属性的get和set方法
3. 重写父类的showMsg方法,按照要求实现信息打印
3、定义职员Clerk类继承Employee类,该类具有如下成员:
(1) 属性:经理Manager(该职员的经理)
(2) 方法:
1. 空参数构造方法和满参数构造方法
2. 属性的get和set方法
3. 重写父类的showMsg方法,按照要求实现信息打印
4、创建Test测试类,测试类中创建main方法,main方法中创建经理对象和职员对象,信息分别如下:
经理:工号为 M001,名字为 张小强,部门为 销售部
职员:工号为 C001,名字为 李小亮,部门为 销售部
经理的职员为李小亮,职员的经理为张小强
分别调用经理的showMsg方法和职员的showMsg方法打印结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g8N0VHS4-1642708791325)(D:\黑马V12\21年黑马3-9\01阶段:JavaSE进阶面授——15\01-JavaSE进阶面授\day01【复习回顾、继承、抽象类】\作业\imgs\wps333E.tmp.jpg)]
答案:
Employee类
package com.myExercise.inherit.topic_03;
/*
(1) 属性:姓名(name,字符串类型),工号(workId,字符串类型),部门(dept,字符串类型),属性私有
(2) 方法:
1. 空参数构造和满参数构造
2. 提供属性的set/get方法
3. 定义showMsg方法抽象方法
*/
public abstract class Employee {
private String name; //姓名
private String workId; //工号
private String dept; //部门
//定义抽象方法
public abstract void showMsg();
//空参方法
public Employee(){
}
//满参方法
public Employee(String name,String workId,String dept){
this.name = name;
this.workId = workId;
this.dept = dept;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public String getWorkId() {
return workId;
}
public void setWorkId(String workId) {
this.workId = workId;
}
public String getDept() {
return dept;
}
public void setDept(String dept) {
this.dept = dept;
}
}
Manager类
package com.myExercise.inherit.topic_03;
//经理类
/* (1) 属性:
职员Clerk(该经理的职员)
(2) 方法:
1. 空参数构造方法和满参数构造方法
2. 属性的get和set方法
3. 重写父类的showMsg方法,按照要求实现信息打印
*/
public class Manager extends Employee{
@Override
public void showMsg(){
System.out.println(super.getDept()+":"+super.getName()+",员工编号:"+super.getWorkId());
System.out.println("他的职员是"+this.clerk);
}
private String clerk; //该经理的职员
//空参构造方法
public Manager(){
}
//满参构造方法
public Manager(String clerk){
}
public Manager(String name, String workId, String dept, String clerk) {
super(name,workId, dept);
this.clerk = clerk;
}
//set&get方法
public void setClerk(String clerk){
this.clerk = clerk;
}
public String getClerk(){
return this.clerk;
}
}
Clerk类
package com.myExercise.inherit.topic_03;
public class Clerk extends Employee{
private String manager;//该员工的经理
@Override
public void showMsg(){
System.out.println(super.getDept()+":"+super.getName()+",员工编号:"+super.getWorkId());
System.out.println("他的经理是"+this.manager);
}
//空参构造方法
public Clerk(){}
//参数构造方法
public Clerk(String manager){
}
public Clerk(String nmae, String workId, String dept, String manager) {
super(nmae, workId, dept);
this.manager = manager;
}
public void setManager(String manager){
this.manager = manager;
}
public String getManager(){
return this.manager;
}
}
Text测试类
package com.myExercise.inherit.topic_03;
/* name; //姓名
workId; //工号
dept; //部门
clerk; //该经理的职员
*/
public class Text {
public static void main(String[] args) {
//快捷键 给构造方法传参看数据类型的时候 用ctrl+p
Manager manager01 = new Manager("张小强","M001","销售部","李小亮");
manager01.showMsg();
Clerk clerk01 = new Clerk("李小亮","C001","销售部","张小强");
clerk01.showMsg();
manager01.setName("小明");
manager01.showMsg();
}
}
遇见问题:
在最后输出的时候 传参失败
原因:
我使用的 父类 满惨构造方法 接收数据
满参构造方法,是自动生成的,方法体为空
所以并没有接收到传递过去的数值,
也可以用set 方法传递值。