java 多态练习


java 多态练习

一、题目:

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


二、思路:

  • 暂无详情看代码

三、代码:

//饮料类
public class Drink {
	public void make() {
		System.out.println("制作完成");
	}
}
//可乐
public class Coke extends Drink {
	public void make() {
		System.out.println("可乐制作完成");
	}
}
//可口可乐
public class CocaCola extends Coke {
	public void make() {
		System.out.println("可口可乐制作完成");
	}
}
//百事可乐
public class Pepsi extends Coke {
	public void make() {
		System.out.println("百事可乐制作完成");
	}
}
//矿泉水
public class Water extends Drink {
	public Water() {
		System.out.println("矿泉水制作完成");
	}
}
//咖啡
public class Coffee extends Drink {
	String ingredients;//佐料

	public void setIngredients(int ingredients) {

		switch (ingredients) {
		case 1:
			this.ingredients = "加糖";
			break;
		case 2:
			this.ingredients = "加奶";
			break;
		case 3:
			this.ingredients = "不加佐料的";
			break;
		default:
			//抛出异常数字不在区间
			throw new IndexOutOfBoundsException();
		}
	}
	public void make() {
		System.out.println(ingredients + "咖啡制作完成");
	}
}



饮料工厂类

public class DrinkFactory {

	public Drink getDrink(int p) {
		Drink drink = null;
		switch (p) {
		case 1:
			drink = new Water();
			break;
		case 2:
			drink = new Coke();
			break;
		case 3:
			drink = new Coffee();
			break;
		default:
			System.out.println("没有这类");
			break;
		}

		return drink;
	}
}

测试饮料类


public class TestDrink {
	public static void main(String[] args) {
		System.out.println("请选择饮料 1-矿泉水,2-可乐,3-咖啡");
		Scanner sc = new Scanner(System.in);
		DrinkFactory factory = new DrinkFactory();
		int nextInt = sc.nextInt();
		Drink drink = factory.getDrink(nextInt);
		switch (nextInt) {
		case 1:
			break;
		case 2:
			System.out.println("请选择可乐类型 1-百事可乐,2-可口可乐");
			if (sc.nextInt() == 1) {
				drink = new Pepsi();
				drink.make();
			} else {
				drink = new CocaCola();
				drink.make();
			}
			break;
		case 3:
			System.out.println("请选择添加的作料 1-加糖 2-加奶 3-不加");
			//向下转型成Coffee
			Coffee coffee = (Coffee) drink;
			//捕获异常
			try {
				coffee.setIngredients(sc.nextInt());
				//利用多态性质
				drink.make();
			} catch (IndexOutOfBoundsException e) {
				// TODO: handle exception
				System.out.println("数字异常");
			}
			break;
		default:
			System.out.println("没有这类");
			break;
		}
		sc.close();
	}
}

正常运行图

在这里插入图片描述
在这里插入图片描述

数字异常捕获截图

数字异常捕获

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值