使用多态理念完成自动贩卖机概念

这个示例展示了如何使用面向对象编程中的多态特性来创建一个自动贩卖机系统。系统包括了不同类型的饮料类(如矿泉水、可乐、冰红茶和雪碧),这些类都继承自一个抽象的饮料类。用户可以通过输入数字选择想要的饮料,自动贩卖机根据输入返回相应的饮料实例,并显示饮料名称和价格。
摘要由CSDN通过智能技术生成

/*
自动贩卖机案例
    用户输入1时 出现矿泉水
        输入2时 出现可乐
        输入3时 出现冰红茶
        输入4时 出现雪碧
    要求:
        分别创建 各种饮料类 使用多态 来进行编写
*/
//创建包
package classes;
//导包
import java.util.Scanner;
//创建饮料类
class Dirnk{
    //饮料的属性 为名字 和 价格
    //定义属性
    //名字属性
    private String name ;
    
    //价格属性
    private int price ;
    
    //提供无参构造方法
    public Dirnk(){}
    //提供有参构造方法
    public Dirnk(String name , int price){
        this.name = name ;
        this.price = price ;
    }
    //提供名字属性的get/set方法
    public void setName(String name ){
        this.name = name ;
    }
    //get方法
    public String getName(){
        return name ;
    }
    //提供价格属性的get/set方法
    public void setPrice(int price){
        this.price = price ;
    }
    //提供get方法
    public int getPrice (){
        return price ;
    }
}
/*
创建矿泉水类并且继承饮料类
*/
class Water extends Dirnk{
    //提供无参构造方法
    public Water(){}
    //提供有参构造方法
    public Water(String name , int price){
        super(name , price);
    }
}
//创建可乐类   
class Coce extends Dirnk{
    //提供无参构造方法
    public Coce(){}
    //提供有参构造方法
    public Coce(String name , int price){
        super( name , price );
    }
}
//创建冰红茶类
class IceTea extends Dirnk {
    //提供无参构造方法
    public IceTea(){}
    //提供有参构造方法
    public IceTea(String name , int price){
        super(name , price);
    }
}
//创建雪碧类
class XueB extends Dirnk{
    //提供无参构造方法
    public XueB(){}
    //提供有参构造方法
    public XueB(String name , int price){
        super(name , price);
    }
}
//创建一个自动贩卖机类
class Machine{
    //定义一个选择方法
    //当用户输入不同的数字时候 跳出不同的饮料 
    public Dirnk sell(int n){
        switch (n){
            case 1 : Water wa = new Water(" 自来水 ", 1 );
                return wa ;
            case 2 : Coce ce = new Coce(" 可口可乐 ", 3 );
                return ce ;
            case 3 : IceTea te = new IceTea(" 冰红茶 ", 5 );
                return te ;
            case 4 : XueB xb = new XueB(" 雪碧 ", 5);
                return xb ;
            default: return null ;
        }
    }
}
//创建测试类
class TestDirnk{
    //main方法
    public static void main(String[] args){
        //创建Scanner类对象 用来完成用户输入
        Scanner sc = new Scanner(System.in);
        //输入提示语句
        System.out.println(" 给出你的选择 ");
        //定义Scanner类对象的数据类型
        int n = sc.nextInt();
        
        //创建自动贩卖机对象
        Machine ma = new Machine();
        //通过ma调用sell方法 传入用户输入的数字
        Dirnk dk  =  ma.sell(n);
        //输出语句
        System.out.println(" 饮料是: "+dk.getName()+" 价格是: "+dk.getPrice());
    }
}


 

好的,下面我来介绍如何在Java面向对象自动贩卖机程序中应用多态、接口和继承。 首先,我们可以定义一个Drink类作为所有饮料的父类,其中包含以下属性: - name:一个String类型的变量,表示饮料名称。 - price:一个double类型的变量,表示饮料价格。 然后,我们可以定义多个子类,分别代表不同的饮料种类,例如Coke、Sprite和MineralWater。这些子类继承自Drink类,并实现Drink提供的接口。 接口可以定义自动贩卖机的基本功能,例如showDrinks()、insertCoin(double coin)和buy(int index)。这些功能可以被VendingMachine类和Drink类的子类实现,以实现代码的复用和扩展。 下面是一个简单的示例代码: ```java public interface IVendingMachine { void showDrinks(); void insertCoin(double coin); void buy(int index); } public class VendingMachine implements IVendingMachine { private Drink[] drinks; private double balance; public VendingMachine(Drink[] drinks) { this.drinks = drinks; this.balance = 0; } @Override public void showDrinks() { System.out.println("饮料种类\t价格"); for (int i = 0; i < drinks.length; i++) { System.out.println((i + 1) + ". " + drinks[i].getName() + "\t" + drinks[i].getPrice()); } } @Override public void insertCoin(double coin) { this.balance += coin; System.out.println("当前余额:" + this.balance); } @Override public void buy(int index) { Drink drink = drinks[index - 1]; if (balance >= drink.getPrice()) { System.out.println("购买成功," + drink.getName() + ",找零:" + (balance - drink.getPrice())); balance -= drink.getPrice(); } else { System.out.println("余额不足,请继续投币"); } } } public class Drink { private String name; private double price; public Drink(String name, double price) { this.name = name; this.price = price; } public String getName() { return name; } public double getPrice() { return price; } } public class Coke extends Drink { public Coke() { super("可乐", 3.0); } } public class Sprite extends Drink { public Sprite() { super("雪碧", 2.5); } } public class MineralWater extends Drink { public MineralWater() { super("矿泉水", 1.5); } } ``` 在这个示例代码中,我们定义了一个IVendingMachine接口,它包含了所有自动贩卖机的基本功能。然后,我们让VendingMachine类实现了这个接口,以便实现自动贩卖机的功能。同时,Drink类和它的子类也实现了这个接口,以便在需要时扩展自动贩卖机的功能。 使用多态和接口的好处在于,我们可以在不修改原有代码的情况下,扩展自动贩卖机的功能。例如,我们可以定义一个新的子类,代表一种新的饮料种类,然后让它实现IVendingMachine接口,即可将这种新的饮料加入到自动贩卖机中。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值