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();
}
}
正常运行图
数字异常捕获截图