一、类的封装详解
在“面向对象编程基础(java)”的时候讲过,封装是面向对象编程的核心思想。同时我们也知道类是载体,只不过我们把对象的属性和行为封装在载体中。
现我们用封装的方式来实现,一个顾客去一家餐饮吃饭,点了一份西红柿炒蛋。
分析:
顾客去餐馆,要跟餐馆服务员点菜
餐馆服务员拿菜单去通知后厨的厨师
厨师拿到菜单,开始准备工作和烹饪
注意:顾客是把想吃的菜告诉了餐馆服务员,那么顾客是可以跟餐馆服务员进行接触的,同时服务员还要记录顾客想吃的菜品。因为要把这个菜品转达给后厨厨师。所以后厨厨师是一直在后面没有跟顾客接触。
//定义餐馆类,为顾客提供服务
public classRestaurant{//每一个餐馆都有厨师
private Cook cook = newCook();public static voidmain(String[] args){//实例化餐馆,提供服务
Restaurant rest = newRestaurant();
System.out.println("我想吃西红柿炒蛋,帮我来一份");
rest.takeOrder("西红柿炒蛋");
}//有为顾客下单行为
public voidtakeOrder(String dish){
cook.cooking(dish);
System.out.println(dish + "已经炒好了,请慢慢享用");
}
}
//定义厨师类
classCook{//厨师名字
privateString name;publicCook(){this.name = "托尼";
}//洗菜行为
privateWashDishes(){
System.out.println(this.name + "洗菜");
}//炸花生米行为
private voidRice(){
System.out.println(this.name + "炸花生米");
}//炒菜行为
public voidCooking(String dish){
WashDishes();
Rice();
System.out.println(name + "开始炒" +dish);
}
}
在简述封装时,就提到过手机类,关于手机当中的功能用户只要负责使用,内部怎么实现不要管。那么关于餐馆,顾客是跟服务员进行沟通而餐馆的厨师并没有和顾客沟通。也就是说,顾客只负责吃自己下单的菜,关于厨师是谁并不知道,所以关于这个过程我们就可以称之为封装。
延伸:请分别以餐馆类、用户类、服务员类、厨师类来完成这个工作。
//餐馆类
public classRestaurant3
{//餐饮名字
public static String name = "三无真味私厨";public static voidmain(String[] args){
Restaurant3 rest= newRestaurant3();
User user= newUser();
Waiter waiter= newWaiter();
System.out.println("欢迎光临"+name+","+user.name+",我是"+waiter.name+"为您服务");
System.out.println("请问你要吃一点什么?");
System.out.println("给我来一份"+user.SayLive());
waiter.TakeOrder(user.SayLive());//顾客吃完去结账
waiter.Cash(user);
System.out.println(user.name + "慢走");
System.out.println("你多大了,长得很漂亮哦!");
waiter.Que();
}
}
//用户类
classUser
{publicString name;publicUser(){this.name = "老板";
}
//说出自己喜欢吃的菜
publicString SayLive(){return "西红柿炒蛋";
}
//付钱
public void Pay(doublemoney){
System.out.println("我已经支付了" + money + ",确认一下。");
}
}
//服务员类
classWaiter
{publicString name;private int age = 19;private Cook cook = newCook();
pu