多态(小案例)

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

2.运行结果:

3.源码

public class Drink {
    private String name;
    private int volume;
    public Drink() {

    }
    public Drink(String name, int volume) {
        super();
        this.name = name;
        this.volume = volume;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getVolume() {
        return volume;
    }
    public void setVolume(int volume) {
        this.volume = volume;
    }
    public void show(){
        System.out.println("您购买的饮料信息如下:");
        System.out.println("名称:"+name);
        System.out.println("容量:"+volume);
    }
}

public class Coffee extends Drink{
    private String mixture;

    public Coffee() {

    }
    public Coffee(String name,int volume, String mixture) {
        super(name,volume);
        this.mixture = mixture;
    }
    public String getMixture() {
        return mixture;
    }
    public void setMixture(String mixture) {
        this.mixture = mixture;
    }
    public void show(){
        System.out.println("您购买的饮料信息如下:");
        System.out.println("名称:"+super.getName());
        System.out.println("添加配料:"+this.getMixture());
        System.out.println("容量:"+super.getVolume());
    }
}
public class Cola extends Drink {
    private String flavor;

    public Cola(String flavor, int volume) {
        super("可乐", volume);
        this.flavor = flavor;
    }

    public String getFlavor() {
        return flavor;
    }
}
public class Water extends Drink {
    public Water(String name, int volume) {
        super(name, volume);
    }

}
import java.util.Scanner;

public class DrinkMaker {


    public  Drink make() {
        Drink drink=null ;

        Scanner input = new Scanner(System.in);
        System.out.println("请选择饮料(1、咖啡2、矿泉水3、可乐)");
        String choice=input.next();
        if ("1".equals(choice)) {
            System.out.println("请输入购买容量:");
            int volume = input.nextInt();
            System.out.println("请问是否要配料(1、加糖 2、加奶 3、什么也不加)");
            int index = input.nextInt();
            String mixture;
            switch (index) {
                case 1:
                    mixture = "加糖";
                    break;
                case 2:
                    mixture = "加奶";
                    break;
                default:
                    mixture = "什么都不加";
            }
            drink = new Coffee("咖啡", volume, mixture);
        } else if ("2".equals(choice)) {
            System.out.println("请输入购买容量:");
            int volume = input.nextInt();
            drink=new Water("矿泉水",volume);

        } else if ("3".equals(choice)) {
            System.out.println("请输入购买容量:");
            int volume = input.nextInt();
            System.out.println("请问是要可口可乐还是百事可乐");
            String ch =input.next();
            drink=new Cola(ch,volume);
        }
        return drink;
    }
}

测试类:


import java.util.Scanner;


public class Test {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        DrinkMaker drinkMaker = new DrinkMaker();
        Drink drink = drinkMaker.make();
        if (drink != null) {
            System.out.println("您购买的饮料是:" + drink.getName());
            if (drink instanceof Coffee) {
                System.out.println("配料:" + ((Coffee) drink).getMixture());
                System.out.println("容量:"+((Coffee)drink).getVolume());
            } else if (drink instanceof Water) {
                System.out.println("容量:"+((Water)drink).getVolume());
            } else if (drink instanceof Cola) {
                System.out.println("口味:" + ((Cola) drink).getFlavor());
            }
        }
    }

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java多态是一种重要的面向对象编程特性,它允许一个对象以多种不同的方式工作。下面介绍一个经典的Java多态案例——“动物园”。 假设有一个“动物园”类,里面有一个“动物”类,还有“狗”和“猫”两个子类,代码如下: ```java class Zoo { public void play(Animal animal) { animal.shout(); } } class Animal { public void shout() { System.out.println("动物叫!"); } } class Dog extends Animal { public void shout() { System.out.println("汪汪汪!"); } } class Cat extends Animal { public void shout() { System.out.println("喵喵喵!"); } } ``` 在“动物园”类中有一个play方法,它接收一个“动物”类对象作为参数,然后调用这个对象的shout方法。在“狗”和“猫”两个子类中分别重写了shout方法,实现了不同的叫声。 这时候我们可以创建一个“动物园”对象,然后分别将“狗”和“猫”对象传递给play方法进行测试。代码如下: ```java public class Main { public static void main(String[] args) { Zoo zoo = new Zoo(); Animal dog = new Dog(); Animal cat = new Cat(); zoo.play(dog); zoo.play(cat); } } ``` 运行结果如下: ``` 汪汪汪! 喵喵喵! ``` 通过这个案例,我们可以看到,在“动物园”类中,play方法接收一个“动物”类对象作为参数,而在实际测试中我们传递的是“狗”和“猫”对象,这就是多态的应用。我们可以看到,即使传递的是不同的对象,调用的都是各自重写的shout方法,实现了不同的叫声。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值