JAVA封装、多态、接口例子

一个饭店中,顾客和厨师之间通过菜单进行沟通,也就是说菜单是一个接口。
在这个例程中,只需修改test类即可控制你想要的选择的厨师类别。

package restaurant;

public class RestaurantTest {
    public static void main(String[] args) {
        //Customer c = new Customer();                          //调用空构造方法,没有给Menu menu赋值
        //c.order();                                            //会触发空指针异常  Exception in thread "main" java.lang.NullPointerException

        Customer customer = new Customer(new ChineseChef());  //customer指向Customer类
        customer.order();                                     //customer引用调用了Customer类下的点菜 方法
        System.out.println(customer.getMenu());               //restaurant.ChineseChef@4e50df2e   getMenu()指向的是ChineseChef

        customer.setMenu(new WestChef());                     //更换厨师Menu menu = new WestChef();    customer的指向没变
        customer.order();
    }
}
package restaurant;

public class Customer {
    private Menu menu;            //Menu数据类型   调用的接口

    public Customer() {
    }

    public Customer(Menu menu) {
        this.menu = menu;         //Menu menu = new ChineseChef();   这里是给menu赋了ChineseChef的地址
    }

    public Menu getMenu() {
        return menu;
    }

    public void setMenu(Menu menu) {
        this.menu = menu;
    }

    public void order(){
        menu.tamatoAndEggs();    //调用 选择的厨师所炒的菜
        menu.vegetable();
    }
}
package restaurant;

public class ChineseChef implements Menu{
    @Override
    public void vegetable() {
        System.out.println("中餐师傅的炒青菜真好吃");
    }

    @Override
    public void tamatoAndEggs() {
        System.out.println("中餐师傅的西红柿炒鸡蛋很好吃");
    }
}
package restaurant;

public class WestChef implements Menu{
    @Override
    public void tamatoAndEggs() {
        System.out.println("西餐师傅的西红柿炒鸡蛋放黄油");
    }

    @Override
    public void vegetable() {
        System.out.println("西餐师傅的炒青菜炒的是西蓝花");
    }
}
package restaurant;

interface Menu {         	//接口
    void tamatoAndEggs();
    void vegetable();
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值