ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

饮料购买

2020-05-22 15:04:05  阅读:294  来源: 互联网

标签:info System 饮料 购买 println type public out


饮料购买

今天带大家使用封装,继承,[多态]来写一个简单的饮料购买程序

话不多说,直接看需求吧:

编写程序实现饮料购买:
编写程序,接收用户输入的信息,选择购买的饮料。
可供选择的饮料有:咖啡、矿泉水和可乐。
其中,购买咖啡时可以选择:容量,然后再选择加糖、加奶还是什么都不加。
购买可乐时可以选择:买可口可乐还是百事可乐。
购买矿泉水可以选择:容量

看完了需求,再来看一下效果图吧:

在这里插入图片描述

既然使用到了继承,那么咱们就要来写父类,找出他们共同的属性:姓名和饮料,我这里将他们的父类定义成了一个抽象类,并且提供了info()的抽象方法,供后面选择重写调用,来看代码:

public abstract class Drink{
    String name;//饮料的名字
    int capacity;//饮料的容量
    public abstract void info();//定义的一个抽象方法,后面其他的子类可以直接重写调用
}

既然使用到了抽象类,那么咱们来一起讨论下抽象的概念:
用abstract修饰的类,表示一种抽象的类型
用abstract修饰的方法,表示一种抽象的行为(比如说,心里知道要做一件事,但是不知道怎么做),如果有哪些行为(方法)必须让子类区做的话,可以把这些行为(方法)定义抽象的,子类必须要实现这些行为(方法)

注意事项:
1.抽象方法没有方法体(没有{}大括号)
2.抽象类不能直接创建对象,必须通过子类创建
3.抽象类中既可以有抽象方法,也可以有非抽象方法
4.继承抽象类,需要实现抽象类中所有的抽象方法

根据需要看:编写程序,接收用户输入的信息,选择购买的饮料.可供选择的饮料有:咖啡、矿泉水和可乐。
其中,购买咖啡时可以选择:容量,然后再选择加糖、加奶还是什么都不加。
购买可乐时可以选择:买可口可乐还是百事可乐。
购买矿泉水可以选择:容量

现在开始创建Drink的子类Coffee类,并且重写他的info方法,并增加了ingredients属性,进行封装
既然提到封装,咱们就来聊一聊封装吧:
封装:就是将所有的属性私有化(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);
	}
	
}

创建Coke类,并继承Drink,重写info()方法,并添加可乐的种类属性type,将type进行封装

/**
 * 可乐类
 *
 */
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");
	}
	
}

创建Water类,继承Drink类,重写info()方法

/**
 * 矿泉水类
 *
 */
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));
}

ok这个简单的程序就这样解决了,有兴趣的大佬可以继续在上面扩展,同时也希望大家可以对本程序提出宝贵的意见,感谢大佬

标签:info,System,饮料,购买,println,type,public,out
来源: https://blog.csdn.net/qq_45280147/article/details/106268936

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有