案例介绍
某星级酒店,要招聘多名员工(经理、厨师、服务员)。入职的员工需要记录个人信息(姓名、工号、经理特有奖金属性)。他们都有自己的工作要做。案例需要完成以下需求:
- 获取酒店幸运员工;
- 酒店开设VIP服务,酒店的厨师与服务员可以提供VIP服务。(厨师做菜加量、服务员给顾客倒酒)。
- 编写测试类:
-
- 向酒店中,增加多名员工(其中包含1名经理,1名厨师、2名服务员);
- 调用酒店员工的工作功能
- 调用酒店员工的VIP服务功能
案例需求分析: (自己画个图最好)
1、服务员、厨师、经理都有自己的姓名、工号、工作方法,所以可以用继承
2、服务员和厨师有VIP服务,可以用接口
3、经理独有奖金可以在类中单独private属性
4、接口类(VIP)、员工类(YuanGong拥有姓名、工号、工作方法等属性)、厨师类、服务员类(ChuShi继承员工类实现接口)、经理类(JingLi有私有属性奖金,继承员工类)、测试类(TeatJiudian创建类调用方法)
注意事项:私有属性有通过getter、setter方法调用、父类中有空参和满参的构造方法,子类继承也是(好习惯),注意子类私有属性的调用方法,继承和实现都要重写父类的方法
代码演示:
package day14;
/*
* 酒店的VIP服务
*/
public interface VIP {
public abstract void services();
}
package day14;
/*
* 酒店的员工类
* 员工共性,姓名,员工号,工作方法
*/
public abstract class YuanGong {
private String name;
private String gonghao;
public abstract void work();
public YuanGong(){}//空参构造器
public YuanGong(String name, String gonghao){//满参构造器
this.name=name;
this.gonghao=gonghao;
}
public void setName(String name){
this.name=name;
}
public void setGonghao(String gonghao){
this.gonghao=gonghao;
}
public String getname(){
return name;
}
public String getgonghao(){
return gonghao;
}
}
package day14;
/*
* 定义厨师类
* 属于员工的一种,具有额外服务功能
* 继承YuanGong类实现VIP接口
*/
public class ChuShi extends YuanGong implements VIP{
//空参的构造方法
public ChuShi(){}
//有参的构造方法
public ChuShi(String name, String gonghao) {
super(name, gonghao);
}
public void services(){
System.out.println("做菜可以加量");
}
//抽象方法重写
public void work() {
System.out.println(super.getname()+"做菜很美味");
}
}
package day14;
/*
* 定义服务类
* 属于员工的一种,具有额外服务功能
* 继承YuanGong类实现VIP接口
*/
public class FuWuyuan extends YuanGong implements VIP {
public FuWuyuan(){}
public FuWuyuan(String name, String gonghao) {
super(name, gonghao);
}
public void services(){
System.out.println("可以给顾客倒酒");
}
//抽象方法重写
public void work(){
System.out.println(super.getname()+"服务很周到");
}
}
package day14;
/*
* 定义经理类
* 属于员工的一种,没有VIP功能
* 自己有奖金属性
*/
public class JingLi extends YuanGong {
//定义经理的奖金属性
private double money;public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
//空参构造方法
public JingLi(){}
//满参构造方法
public JingLi(String name, String gonghao,double money) {
super(name, gonghao);
this.money=money;
}
public void work() {
System.out.println(super.getname()+"管理,谁出错罚谁");
}
}
package day14;
//测试类
public class TeatJiudian {
public static void main(String[] args) {
ChuShi a=new ChuShi("张三","0001");
a.work();
a.services();
FuWuyuan b=new FuWuyuan("李四","0002");
b.work();
b.services();
JingLi c=new JingLi("王宇","0003",12345.34);
c.work();
}
}
输出结果为:
张三做菜很美味
做菜可以加量
李四服务很周到
可以给顾客倒酒
王宇管理,谁出错罚谁
知识点总结
- 不同修饰符的使用
- 类,最常使用public修饰
- 成员变量,最常使用private修饰
- 成员方法,最常使用public修饰
- 自定义数据类型的使用
- 类作为方法参数时,说明要向方法中传入该类的对象
- 类作为方法返回值时,说明该方法要返回一个该类的对象。
- 抽象类作为方法参数时,说明要传入一个实现抽象类所有抽象方法的子类对象。
- 抽象类作为方法返回值时,说明需要返回一个实现抽象类所有抽象方法的子类对象。
- 接口作为方法参数时,说明该方法要传入一个接口实现类对象。
- 接口作为方法返回值时,说明该方法需要返回一个接口实现类对象。