每日一学(16)——(面向对象)星级酒店案例

案例介绍

某星级酒店,要招聘多名员工(经理、厨师、服务员)。入职的员工需要记录个人信息(姓名、工号、经理特有奖金属性)。他们都有自己的工作要做。案例需要完成以下需求:

  • 获取酒店幸运员工;
  • 酒店开设VIP服务,酒店的厨师与服务员可以提供VIP服务。(厨师做菜加量、服务员给顾客倒酒)。
  • 编写测试类:
    1. 向酒店中,增加多名员工(其中包含1名经理,1名厨师、2名服务员);
    2. 调用酒店员工的工作功能
    3. 调用酒店员工的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();
}

输出结果为: 

张三做菜很美味
做菜可以加量
李四服务很周到
可以给顾客倒酒
王宇管理,谁出错罚谁

知识点总结

  1. 不同修饰符的使用
    1. 类,最常使用public修饰
    2. 成员变量,最常使用private修饰
    3. 成员方法,最常使用public修饰
  2. 自定义数据类型的使用
    1. 类作为方法参数时,说明要向方法中传入该类的对象
    2. 类作为方法返回值时,说明该方法要返回一个该类的对象。
    3. 抽象类作为方法参数时,说明要传入一个实现抽象类所有抽象方法的子类对象。
    4. 抽象类作为方法返回值时,说明需要返回一个实现抽象类所有抽象方法的子类对象。
    5. 接口作为方法参数时,说明该方法要传入一个接口实现类对象。
    6. 接口作为方法返回值时,说明该方法需要返回一个接口实现类对象。

猜你喜欢

转载自blog.csdn.net/weixin_42517286/article/details/81357573