今天带大家使用封装,继承,[多态]来写一个简单的饮料购买程序 话不多说,直接看需求吧: 编写程序实现饮料购买: 看完了需求,再来看一下效果图吧: 既然使用到了继承,那么咱们就要来写父类,找出他们共同的属性:姓名和饮料,我这里将他们的父类定义成了一个抽象类,并且提供了info()的抽象方法,供后面选择重写调用,来看代码: 既然使用到了抽象类,那么咱们来一起讨论下抽象的概念: 注意事项: 根据需要看:编写程序,接收用户输入的信息,选择购买的饮料.可供选择的饮料有:咖啡、矿泉水和可乐。 现在开始创建Drink的子类Coffee类,并且重写他的info方法,并增加了ingredients属性,进行封装 **封装的思想:**将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体就是类 创建Coke类,并继承Drink,重写info()方法,并添加可乐的种类属性type,将type进行封装 创建Water类,继承Drink类,重写info()方法 创建测试类,将上面的类综合到一起 ok这个简单的程序就这样解决了,有兴趣的大佬可以继续在上面扩展,同时也希望大家可以对本程序提出宝贵的意见,感谢大佬
饮料购买
编写程序,接收用户输入的信息,选择购买的饮料。
可供选择的饮料有:咖啡、矿泉水和可乐。
其中,购买咖啡时可以选择:容量,然后再选择加糖、加奶还是什么都不加。
购买可乐时可以选择:买可口可乐还是百事可乐。
购买矿泉水可以选择:容量public abstract class Drink{ String name;//饮料的名字 int capacity;//饮料的容量 public abstract void info();//定义的一个抽象方法,后面其他的子类可以直接重写调用 }
用abstract修饰的类,表示一种抽象的类型
用abstract修饰的方法,表示一种抽象的行为(比如说,心里知道要做一件事,但是不知道怎么做),如果有哪些行为(方法)必须让子类区做的话,可以把这些行为(方法)定义抽象的,子类必须要实现这些行为(方法)
1.抽象方法没有方法体(没有{}大括号)
2.抽象类不能直接创建对象,必须通过子类创建
3.抽象类中既可以有抽象方法,也可以有非抽象方法
4.继承抽象类,需要实现抽象类中所有的抽象方法
其中,购买咖啡时可以选择:容量,然后再选择加糖、加奶还是什么都不加。
购买可乐时可以选择:买可口可乐还是百事可乐。
购买矿泉水可以选择:容量
既然提到封装,咱们就来聊一聊封装吧:
封装:就是将所有的属性私有化(private修饰的属性),即只能在本类中使用,如果在其他类中需要访问的话,就需要通过奔雷提供的特定的getXXX和setXXX方法进行访问
**注意:**在面向对象的开发中,一般建议用封装的特性去编写实体类(将所有的属性私有化并提供get和set方法)/** * 咖啡类 * */ public class Coffee extends Drink { private String ingredients;//饮料的配料 //使用封装,写ingredients的set/get方法,方便其他类的调用 public void setIngredients(String ingredients) { this.ingredients = ingredients; } public String getIngredients() { return ingredients; } /** * 因为本类继承了抽象类Drink,Drink类中有一个抽象的方法 * 所以在这里面如果想要继承Drink类,就需要重写Drink中的info方法 * 方便后面的直接调用 */ @Override public void info() { System.out.println("名称:"+name); System.out.println("容量:"+capacity+"ml"); System.out.println("配料:"+ingredients); } }
/** * 可乐类 * */ public class Coke extends Drink { //可乐的种类 private String type; //使用封装,set/get方法 public void setType(String type) { this.type = type; } public String getType() { return type; } /** * 重写父类的info方法 */ @Override public void info() { System.out.println("您购买饮料的信息如下:"); System.out.println("名称:"+name); System.out.println("种类:"+type); System.out.println("容量:"+capacity+"ml"); } }
/** * 矿泉水类 * */ public class Water extends Drink{ /** * 重写了Drink类中的info方法 */ @Override public void info() { System.out.println("您要购买的信息如下:"); System.out.println("名称:"+name); System.out.println("容量:"+capacity+"ml"); } }
public class DrinkTest { //个人爱好,我喜欢定义成全局的键盘扫描器 static Scanner in = new Scanner(System.in); static String jixu; public static void main(String[] args) { do { //提示语 System.out.println("~~~~~~~~~~~~自动售水机欢迎您~~~~~~~~~~~~"); System.out.println("请选择购买的饮料:1.咖啡 2.矿泉水 3.可乐 4.退出"); //定义type变量用来接收用户输入的信息 int type = in.nextInt(); //根据用户选择的类型来执行不同的操作 if(type == 1) { System.out.println("请输入购买容量:"); Coffee c = new Coffee();//创建咖啡对象 //这里面使用继承,咖啡类里面没有capacity和name属性,将会使用父类的属性,将这两个内容赋值给父类的属性 c.capacity = in.nextInt(); c.name = "咖啡"; //使用switch提示用户加糖,加奶,还是什么都不加操作 System.out.println("是否需要添加配料: 1.加糖 2.加奶 3.什么都不加"); int num = in.nextInt();//定义变量用来接收用户输入的操作 //将变量使用在switch中,执行不同的操作 switch(num) { case 1: //当用户输入1时,把加糖赋值给Coffee中的set方法 c.setIngredients("加糖"); break; case 2: c.setIngredients("加奶"); break; case 3: c.setIngredients("什么都不加"); break; default : System.out.println("您输入的指令不正确"); break; } System.out.println("您要购买的饮料信息如下:"); //调用咖啡类重写父类的info方法 c.info(); //如果用户输入2的时候,执行的操作如下 }else if(type == 2) { System.out.println("请输入购买容量:"); Water w = new Water(); w.name = "矿泉水"; //将用户输入的容量赋值给 Water类中的capacity属性 w.capacity = in.nextInt(); //因为Drink类是一个抽象类,并且有一个抽象方法,所以Water类继承Drink需要重写info方法,来调用重写后的info方法 w.info(); //如果用户输入的是3,执行的操作 }else if(type == 3) { System.out.println("请输入购买容量:"); Coke c = new Coke(); c.name = "可乐"; //将用户输入的容量赋值给coke中父类的capacity 属性 c.capacity = in.nextInt(); System.out.println("请选择可乐的种类: 1.可口可乐 2.百事可乐"); //因为可乐分种类,所以定义num变量来接收用户输入的种类 int num = in.nextInt(); //根据种类的不同,执行不同的操作 switch(num) { case 1 : //如果是可口可乐将赋值 c.setType("可口可乐"); break; case 2: //如果是百事可乐将赋值 c.setType("百事可乐"); break; //如果用户乱输的话,提示语 default: System.out.println("不好意思,咱这没您想要的肥仔快乐水"); break; } //最后跟Water类一样,调用重写后的info方法 c.info(); //退出程序 }else if(type == 4) { System.out.println("欢迎下次光临"); break; } System.out.println("请问您是否继续购买: y or n"); //使用jixu变量来接收用户输入的是否是y jixu = in.next(); //如果输入的是y执行,否则执行 if(jixu.equals("y")) { System.out.println("请继续操作......"); }else { System.out.println("谢谢使用....."); } }while("y".equals(jixu)); } //使用变量jixu来接收用户输入的是否是y jixu = in.next(); //如果输入的是y执行,否则执行 if(jixu.equals("y")) { System.out.println("请继续操作......"); }else { System.out.println("谢谢使用....."); } }while("y".equals(jixu)); }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算