• 顾客餐馆点菜


    package com.javase.进阶;
    
    public interface FoodMenu {
    //    西红柿炒鸡蛋
        void xiHongShiChaoJiDan();
    
    //    鱼香肉丝
        void yuXiangRouSi();
    }
    
    package com.javase.进阶;
    
    public class AmericaCooker implements FoodMenu {
    //    实现菜单接口,就需要实现菜单中所有的方法
    
        public void xiHongShiChaoJiDan() {
            System.out.println("西餐师傅做的西红柿炒鸡蛋!太甜啦!");
        }
    
        public void yuXiangRouSi() {
            System.out.println("西餐师傅做的鱼香肉丝!太甜啦!");
        }
    }
    package com.javase.进阶;
    
    class ChinaCooker implements FoodMenu {
    //    实现接口,需要实现接口中的所有方法
        public void xiHongShiChaoJiDan(){
            System.out.println("中餐师傅做的西红柿炒鸡蛋,河北口味!");
        }
    
        public void yuXiangRouSi() {
            System.out.println("中餐师傅做的鱼香肉丝,河北口味!");
        }
    }
    package com.javase.进阶;
    
    public class Customer {
    //    顾客手中有一个菜单,符合" has a " 所以“菜单”应该是顾客的一种属性
        private FoodMenu foodMenu;
    //    无参构造
    
        public Customer() {
        }
    
    //    有参构造
    
        public Customer(FoodMenu foodMenu) {
            this.foodMenu = foodMenu;
        }
    
    //    set and get 方法
    
        public FoodMenu getFoodMenu() {
            return foodMenu;
        }
    
        public void setFoodMenu(FoodMenu foodMenu) {
            this.foodMenu = foodMenu;
        }
    
    //    顾客点菜的方法
        public void order(){
    //        顾客需要先拿到菜单(getFoodMenu()),然后点菜(因为菜单中有xiHongShiChaoJiDan(),所以.xiHongShiChaoJiDan())
    //        下行代码getFoodMenu()获取的是FoodMenu类型的引用,父类型引用在调用方法的时候,执行的是子类型重写后的方法
            getFoodMenu().xiHongShiChaoJiDan();
    //        因为菜单里有yuXiangRouSi(),所以.yuXiangRouSi()
            getFoodMenu().yuXiangRouSi();
        }
    }
    
    package com.javase.进阶;
    
    public class FoodMenuText {
        public static void main(String[] args) {
    
    //        创建一个中餐师傅(此处使用多态,父类型引用指向子类型对象; 中餐师傅实现了菜单接口,FoodMenu就是父,ChinaCooker就是子)
            FoodMenu cooker1 = new ChinaCooker();
    //        创建一个西餐师傅(此处使用多态,父类型引用指向子类型对象; 西餐师傅实现了菜单接口,FoodMenu就是父,AmericaCooker就是子)
            FoodMenu cooker2 = new AmericaCooker();
    //        创建一个顾客,给顾客传入一个西餐师傅对象,该顾客点菜后吃到的就是西餐师傅做的菜
    //        Customer customer = new Customer(cooker2);
    //        创建一个顾客,给顾客传入一个中餐师傅对象,该顾客点菜后吃到的就是中餐师傅做的菜
            Customer customer = new Customer(cooker1);
    //        顾客点菜
            customer.order();
        }
    }

    /*

    程序运行结果:中餐师傅做的西红柿炒鸡蛋,河北口味!
    中餐师傅做的鱼香肉丝,河北口味!

    */

  • 相关阅读:
    如何设计可扩展架构
    朴素贝叶斯算法
    基于Android studio图书馆自习室座位预约系统java
    认识SQLServer
    ARTS打卡第四周之删除链表倒数第几个节点、gdb start命令、扩散模型、如何学习分享
    详细了解JVM运行时内存
    【RocketMQ 十二】RocketMQ工作原理之消息的消费
    中国汽车工业协会软件分会中国汽车基础软件生态标委会第三届二次会议在天津顺利召开
    使用c#将aj-report桌面化:2.c#桌面程序合成nginx
    强化学习:玩转Atari-Pong游戏
  • 原文地址:https://blog.csdn.net/heliuerya/article/details/128108556